Java 如何实现泛型类型的构造函数

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;

我在编写自己的泛型类方面做得不多,但我正在尝试创建自己的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;
公共阵列堆栈(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谢谢,我现在明白了。我很困惑,因为泛型类的语法是如何定义的。我认为构造函数定义必须与之匹配。我缺少参数是一个独立但重要的问题问题。感谢您的帮助!