gpt4 book ai didi

java - 如何使用泛型初始化数组?

转载 作者:行者123 更新时间:2023-12-01 14:01:04 25 4
gpt4 key购买 nike

我正在 Java 中实现这样的接口(interface):

public interface Stack <E>{
public int size();
public boolean isEmpty();

实现它的类:

public class StackArray<E> implements Stack<E>{
private Object list[];
private int top=-1;
public StackArray(int n){
list=new Object[n];
}

这工作得很好,所以当我调用它时,我这样做:

public static void main(String[] args) {
// TODO code application logic here
StackArray<Students> st=new StackArray<>(4);

那么我如何实现它,但是使用泛型,我已经尝试过:

public class StackArray<E> implements Stack<E>{
private E st[];
private int top=-1;
public StackArray(int n){
st=(E[]) Array.newInstance(null, n);
}

但是我得到了一个 nullPointerException,有没有办法超越这个?

最佳答案

因为type erasure ,在创建对象数组时,您有时需要传递实际的类(或可以通过 getClass() 获取该类的实际对象)。您不能将 null 作为第一个参数传递给 Array.newInstance;你需要一个真正的类(class)。一种方法是:

public class StackArray<E> implements Stack<E>{
private E st[];
private int top=-1;
public StackArray(Class<E> type, int n) {
st=(E[]) Array.newInstance(type, n);
}
}

您需要使用实际类型来调用它,而不是null。例如:

StackArray<Integer> stack = new StackArray<>(Integer.class, 20);

您还可以将构造函数声明为

    public StackArray(Class<? extends E> type, int n) {

但我认为这样做没有太大好处(以及一些风险)。

但是,一般来说,将数组与泛型混合使用并不是一个好主意。我建议你重新考虑你的设计。

关于java - 如何使用泛型初始化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19347214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com