【问题标题】:Java Generics <T> MeaningJava 泛型 <T> 含义
【发布时间】:2020-02-13 03:48:59
【问题描述】:

我正在阅读和审查以下网站并有一个问题。

https://www.geeksforgeeks.org/angle-bracket-in-java-with-examples/

在下面的解释中,它们显示了类定义,后跟&lt;T&gt;,然后在实际实现这些类时,它们使用不同的类型,例如或作为参数。我的问题是:'' 符号实际上是 Java 中定义的语法吗?特别是,为了定义“通用”,T 是必要的吗?然后它基本上意味着参数可以是多种不同的类型吗?另外,如果有人可以用更简单的术语改写或解释泛型的含义,那将非常有帮助。谢谢。

【问题讨论】:

  • 那个网站看起来不错;我不确定我们还能添加什么。是的,T 是必要的——在他们的class Test 示例中,它在声明局部变量T obj; 和声明public T getObject() 等方法时使用。对于Test 的每个实例,它们从编译时声明的类型中获取类型 - 例如,Test&lt;String&gt; sObj 表示 sObj 将有一个 String 类型的实例变量 obj,并且它的 getObject() 方法返回一个 @ 987654333@.
  • 好的 - 我的理解是否正确,我上面描述的?换句话说,T 是泛型语法的实际部分,这意味着 Class 的参数可以是变量类型?
  • &lt;T&gt; 是泛型类型。也许阅读official tutorial
  • 是的,具有一种(或多种)类型的尖括号是泛型的语法。 T(确认,可以是任何标识符)用作(实际上,被替换)提供的类型的占位符。除此之外,我不确定您的意思是“类的参数可以是变量类型”。
  • 感谢 Ole V.V. - 我喜欢其中一个解释的一部分:在类名之后指定尖括号意味着您正在创建一个可以保存任何类型数据的临时数据类型。

标签: java generics syntax type-parameter


【解决方案1】:

&lt;T&gt;确实是Java定义的语法,但是你可以使用任何你想命名的类型,你不需要使用T,例如这是有效的:

public class Box<MyType> {
    private MyType t;

    public void set(MyType t) { this.t = t; }
    public MyType get() { return t; }
}

但是,请坚持使用 T 或其他常见类型名称,因为其他人已经习惯将它们视为“通用类型”,因此它可以让您更轻松地阅读代码。

我推荐你阅读 Java 的 Trail about Generics,在那里你可以找到最常用的类型参数名称:

E - Element
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types

至于“泛型是什么意思”,请查看other page

【讨论】:

    【解决方案2】:

    它是自 Java 5 以来定义的语法。您需要一个类型参数(一个或多个)来定义泛型。类型参数不需要称为T,任何Java 标识符都可以。单个大写字母是常规的,如果没有其他字母的具体原因,我们通常会选择T 作为类型。

    实际类型参数必须是引用类型。值仍然总是进入圆括号中的实际参数,而不是类型参数(例如,与 C++ 不同)。你可以创建一个new ArrayList&lt;Integer&gt;(50),一个Integer对象的列表,初始容量为50个。

    实际类型参数必须是引用类型意味着您可以拥有List&lt;String&gt;List&lt;LocalDate&gt; 或您自己声明的接口类型列表,甚至是List&lt;int[]&gt;。在我使用的 Java 版本(直到 Java 10)中,类型参数不能是原始类型(如 int),但它可以是数组类型(如 int[]String[][],尽管通常不切实际)。允许原始类型可能会出现在未来的 Java 版本中。

    链接:类似问题:What does < T > (angle brackets) mean in Java?

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多