【问题标题】:What does the <TYPE> in java mean?java中的<TYPE>是什么意思?
【发布时间】:2012-09-29 02:59:50
【问题描述】:

我见过 TYPE&lt;CLASS&gt; 的声明、接口和类

这是什么意思?

【问题讨论】:

  • @MadProgrammer 可能是泛型类型??
  • 你一定指的是bounded types,它是Java的Generics的一部分。
  • 公共接口网格
  • ArrayList getValidAdjacentLocations(Location loc);
  • Nitpick:它们是参数化类型(不一定具有有界类型参数)。

标签: java syntax


【解决方案1】:

没有证据,我相信你说的是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的对象,包括IntegerLongDoubleFloat...

通常在方法和类减速中,您会看到类似...

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());

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

阅读第一段中的链接,我相信它可以做到比我更公正;)

【讨论】:

  • (也许你的措辞与我的不同)列表 extends Number> 表示您不知道确切的参数类型,只知道它扩展了 Number。这可能意味着 List、List 等... 通过声明这样的变量,编译器不可能知道真正的类型是什么。结果调用诸如“add”之类的方法将导致编译错误(继续尝试)。以这种方式声明的集合主要用于迭代。 List 但是可以包含任何作为 Number 子类的对象。
【解决方案2】:
public class Grid<E> {

这就是在 Java 中定义泛型类的方式。Grid 是类,E 是形式类型参数。

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

【讨论】:

    【解决方案3】:

    即泛型类型check it here。 简单的例子是

    List<String>
    
    Map<Integer, String>
    

    【讨论】:

      【解决方案4】:

      如果不查看您所看到的确切内容,则不清楚您在问什么。但是您很可能会看到 Java 中的泛型。 Learn more about it here

      这个想法基本上是为了在 Java 中增强类型安全性。所以,像List&lt;Integer&gt; intList 这样的声明意味着intList 里面有整数。如果您尝试输入一个字符串,例如,它会引发编译错误。

      【讨论】:

        猜你喜欢
        • 2015-08-20
        • 1970-01-01
        • 2011-04-16
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 2016-10-04
        相关资源
        最近更新 更多