8

我已经看到了声明、接口和类TYPE<CLASS>

这是什么意思?

4

4 回答 4

23

没有证据,我相信你在谈论Java 的泛型支持......

泛型允许您对类型进行抽象

在 Java 5 之前,很难提供能够支持多种不同类型的对象的类,而不必针对每种特定情况进行编码,因此人们通常会通过Object

这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否可以将给定的 Object 转换为可用的类型......例如

List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3    

现在,这是相当明显的,但是如果您只通过了 a 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, include 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());

并且知道它只会接受我指定的对象类型......

阅读第一段中的链接,我相信它可以做更多的正义,然后我可以;)

于 2012-09-29T03:06:46.350 回答
9
public class Grid<E> {

这就是在 Java 中定义泛型类的方式。Grid是类并且E是一个正式的类型参数。

如果你真的有兴趣了解它,你会在这里找到一个非常好的参考 - Java Generics FAQs - FAQs

于 2012-09-29T03:05:36.480 回答
3

那是泛型类型在这里检查它。简单的例子是

List<String>

Map<Integer, String>
于 2012-09-29T03:05:15.400 回答
1

如果不看看你到底看到了什么,就不清楚你在问什么。但是您很可能会看到 Java 中的泛型。点击此处了解详情

这个想法基本上是为了在 Java 中增强类型安全性。因此,类似List<Integer> intList手段的声明中intList包含整数。如果您尝试输入一个字符串,例如,它会引发编译错误。

于 2012-09-29T03:06:36.290 回答