我只是从一本教科书中学习 Java 中的泛型,它谈到了一个类 GenericStack<E>
用 ArrayList<E>
实现.
因为为了创建一堆字符串,您使用
GenericStack<String> = new GenericStack<String>()
或
GenericStack<String> new GenericStack<>()
因此不应该的构造函数
GenericStack
定义为 public GenericStack<E>()
, 或 public GenericStack<>()
?答案是不。应定义为 public GenericStack()
.
这是为什么?显然构造函数可以很容易地从类声明中推断出类型,但是考虑到 Java 的冗长,我有点困惑为什么 <E>
或者只是 <>
在这里完全摆脱了形式主义。
最佳答案
这有两个部分:
为类定义指定的泛型类型参数在类本身内可用。
您可以拥有特定于各个方法(包括构造函数)的泛型类型。
看下面的例子:
package snippet;
import java.util.ArrayList;
public class Y<E> extends ArrayList<E> {
public <T> Y(T t) {
}
}
E
类型可用于整个类,T
类型仅在构造函数中有效。
关于java - 为什么在泛型类(Java)的构造函数中提供类型参数是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304427/