没有证据,我相信你说的是Java's Generics支持...
泛型允许您对类型进行抽象
在 Java 5 之前,很难提供能够支持多种不同类型对象的类,而无需针对每种特定情况进行编码,因此人们通常会传递 Object。
这导致在运行时做出许多艰难的选择,您必须进行运行时检查以查看是否可以将给定的 Object 转换为可用类型...例如
List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3
现在,这是相当明显的,但如果您只传递了一个 List,则您必须检查列表中的每个元素是否正确...
但是现在,我们可以这样做了……
List<Integer> myIntList = new LinkedList<Integer>(); // 1'
myIntList.add(new Integer(0)); // 2'
Integer x = myIntList.iterator().next(); // 3'
这是一个合同,基本上说“这个列表只包含整数类型的对象”。
使用泛型,您可以构建一个能够处理多种不同数据类型或一系列数据类型的类(即约束参数,使其必须从特定父类型扩展)。
Iterator<? extends Number> itNum;
基本上说,这将包含继承自Number的对象,包括Integer、Long、Double、Float...
通常在方法和类减速中,您会看到类似...
public class MyGenericClass<T> {...}
或
public class MyGenericClass<T extends MyBaseObject> {...}
这允许您引用T,就好像它是一个具体的对象类型,例如...
public class MyGenericClass<T extends MyBaseObject> {
private T value;
public MyGenericClass(T value) {
this.value = value;
}
}
这允许编译器(和 JVM)从本质上“替换”标记 T 为 Concert 类型(好吧,这有点复杂,但这就是魔法)...
这允许做类似...的事情
... new MyGenericClass<MySuperObject>(new MySuperObject());
... new MyGenericClass<MySuperSuperObject>(new MySuperSuperObject());
并且知道它只会接受我指定的对象类型...
阅读第一段中的链接,我相信它可以做到比我更公正;)