我只是从一本教科书中学习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
类型仅在构造函数中有效。