Java 如何实现泛型类型的构造函数
我在编写自己的泛型类方面做得不多,但我正在尝试创建自己的ArrayStack类,在理解如何正确编写构造函数时遇到了困难Java 如何实现泛型类型的构造函数,java,generics,compiler-errors,Java,Generics,Compiler Errors,我在编写自己的泛型类方面做得不多,但我正在尝试创建自己的ArrayStack类,在理解如何正确编写构造函数时遇到了困难 public class ArrayStack<T> implements List<T> { private T[] a; private int n; public ArrayStack(T[] a) { this.a = a; } } 公共类ArrayStack实现列表{ 私人T[]a; 私人int n;
public class ArrayStack<T> implements List<T> {
private T[] a;
private int n;
public ArrayStack(T[] a) {
this.a = a;
}
}
公共类ArrayStack实现列表{
私人T[]a;
私人int n;
公共阵列堆栈(T[]a){
这个a=a;
}
}
以及我使用它的主要类:
public class ArrayStackTester {
public static void main(String[] args) {
ArrayStack<Integer> numbers = new ArrayStack<Integer>();
}
}
公共类ArrayStackTester{
公共静态void main(字符串[]args){
ArrayStack编号=新的ArrayStack();
}
}
这会产生一个编译错误,表示ArrayStack未定义
,因此我显然怀疑ArrayStack
类中的构造函数有问题
为了简洁起见,我没有包括所有重写的
列表方法。首先尝试定义这个无参数构造函数:
public ArrayStack() {
}
或者,传递正确类型的数组:
Integer[] array = new Integer[100];
ArrayStack<Integer> numbers = new ArrayStack<Integer>(array);
Integer[]数组=新整数[100];
ArrayStack编号=新的ArrayStack(阵列);
是否已编译ArrayStack类?
有一个通用数组,它会导致问题
您定义了一个构造函数,它采用T[]
。然后您尝试调用一个没有参数的构造函数。您需要为new ArrayStack()
定义构造函数才能完成所需的操作
public ArrayStack() {
// Initialize a (and possibly n) here as appropriate)
}
如果你想使用无参数构造函数,你需要定义一个无参数构造函数。你唯一的构造函数public ArrayStack(T[]a){
需要T[]
array,在你的例子中是Integer[]
。这个数组在哪里?典型的编译错误。实际的问题更简单:构造函数ArrayStack()
未定义。您只定义了构造函数ArrayStack(t[])
谢谢@Paul我错过了这里的简单性,因为我对正确编写构造函数和定义泛型感到困惑。我想我的困惑是泛型。构造函数不需要与类定义匹配?public ArrayStack(){}
@inquisitor您正在调用一个无参数构造函数,因此您需要先定义一个。它与泛型无关。@ÓscarLópez谢谢,我现在明白了。我很困惑,因为泛型类的语法是如何定义的。我认为构造函数定义必须与之匹配。我缺少参数是一个独立但重要的问题问题。感谢您的帮助!