我见过TYPE<CLASS>
这是什么意思?
答案 0 :(得分:21)
没有证据,我相信你在谈论Java's Generics支持......
泛型允许您抽象类型
在Java 5之前,很难提供能够支持多种不同类型对象的类,而无需针对每种特定情况进行编码,因此人们通常会通过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
(好吧,它稍微复杂一点,但那是神奇的)......
这允许做像......这样的事情。
... new MyGenericClass<MySuperObject>(new MySuperObject());
... new MyGenericClass<MySuperSuperObject>(new MySuperSuperObject());
并且知道它只会接受我指定的对象类型......
阅读第一段中的链接,我确信它可以做得更公正然后我可以;)
答案 1 :(得分:9)
public class Grid<E> {
这就是你在Java中定义泛型类的方法。Grid
是类,E
是形式类型参数。
如果你真的有兴趣了解它,你会在这里找到一个很好的参考 - Java Generics FAQs - Frequently Asked Questions
答案 2 :(得分:3)
这是通用类型check it here。 简单的例子是
List<String>
Map<Integer, String>
答案 3 :(得分:1)
目前还不清楚你在问什么而不看你究竟看到了什么。但很可能你会看到Java中的泛型。 Learn more about it here
这个想法基本上是为了在Java中提高类型安全性。因此,像List<Integer> intList
这样的声明意味着intList
中包含整数。如果你试图把一个,比方说,字符串 - 它会抛出编译错误。