java中的<TYPE>是什么意思?

tre*_*f95 7 java syntax

我见过声明,接口和类 TYPE<CLASS>

这意味着什么?

Mad*_*mer 21

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

泛型允许您抽象类型

在Java 5之前,很难提供能够支持多种不同类型对象的类,而无需为每种特定情况编写代码,因此人们通常会通过它Object.

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

List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3    
Run Code Online (Sandbox Code Playgroud)

现在,这是相当明显的,但如果你只是通过a List,你必须检查列表中的每个元素是否正确...

但现在,我们可以这样做......

List<Integer> myIntList = new LinkedList<Integer>(); // 1'
myIntList.add(new Integer(0)); // 2'
Integer x = myIntList.iterator().next(); // 3'
Run Code Online (Sandbox Code Playgroud)

这是一个合同,基本上说"这个列表只包含整数类型的对象".

使用泛型,您可以构造一个能够处理多个不同数据类型或一系列数据类型的类(即约束参数,以便必须从特定父类型扩展).

Iterator<? extends Number> itNum;
Run Code Online (Sandbox Code Playgroud)

基本上说,这将包括从继承的对象Number,包括Integer,Long,Double,Float...

通常在方法和类减速中你会看到类似于......的东西

public class MyGenericClass<T> {...}
Run Code Online (Sandbox Code Playgroud)

要么

public class MyGenericClass<T extends MyBaseObject> {...}
Run Code Online (Sandbox Code Playgroud)

这允许您将其T称为具体对象类型,例如......

public class MyGenericClass<T extends MyBaseObject> {
    private T value;
    public MyGenericClass(T value) {
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许编译器(和JVM)基本上T用音乐会类型"替换"标记(好吧,它比那更复杂,但那是神奇的)......

这允许做像......这样的事情

... new MyGenericClass<MySuperObject>(new MySuperObject());
... new MyGenericClass<MySuperSuperObject>(new MySuperSuperObject());
Run Code Online (Sandbox Code Playgroud)

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

请仔细阅读第一段中的链接,我确信它可以做得更公正然后我可以;)

  • (也许你的措辞与我的不同)List <?extends Number>表示您不知道确切的参数类型,只是它扩展了Number.这可能意味着List <Integer>,List <Double>等......通过声明这样的变量,编译器不可能告诉真正的类型是什么.因此,调用像"add"这样的方法会导致编译错误(继续尝试).以这种方式声明的集合主要用于迭代.List <Number>但是可以包含任何Number子类的对象. (3认同)

Bhe*_*ung 9

public class Grid<E> {
Run Code Online (Sandbox Code Playgroud)

这就是你在Java中定义泛型类的方法.Grid是类,E是一个正式的类型参数.

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