问题是您的代码使用相同的字符A,但是在不同的地方有 几个 不同的“含义”:
public class Box<T> {需要大括号,因为您在这里说:Box使用通用类型,称为T。
*不带花括号的T go的 *用法 :
private T a;public void setA(T a) {但是之后
public <T2> List<T2> transform(List<T2> in) {正在引入 另一个 类型参数。我把它命名为T2,使之清楚,这是 不 一样的T.的想法是,在 范围 T2的是 唯一的
一个方法
transform。其他方法不了解T2!
public static <A> A getFirstElement(List<A> list) {与上述相同-在此处为“ T3” ;-)
编辑您的评论:您不能使用 静态
方法使用类范围的类型T。这根本不可能!见这里为什么是!
编辑二:泛型允许您编写 泛型的 代码(因为它可以处理 不同的 类);但是仍然可以保证 编译时的 安全性。例:
Box<String> stringBox = new Box<>(); Box<Integer> integerBox = new Box<>(); integerBox.add("string"); // gives a COMPILER error!在人们拥有泛型之前,他们只能在整个地方处理 Object 。和手动铸造。



