Java 泛型 <T> 含义

Java Generics <T> Meaning

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

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

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

<T>确实是由Java定义的语法,但是你可以使用任何你想命名的类型,你不需要使用T,因为例如这是有效的:

public class Box<MyType> {
    private MyType t;

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

但是,请坚持使用 T 或其他常见类型名称,因为其他人已经习惯将它们视为 "generic types",这样可以使您的代码阅读更简单。

我建议您阅读 Java 关于 Generics 的 Trail,您可以在其中找到最常用的类型参数名称:

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

至于"what the meaning of generics is",勾选这个other page

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

实际类型参数必须是引用类型。值仍然总是进入圆括号中的实际参数,而不是类型参数(例如,与 C++ 不同)。您可以制作一个 new ArrayList<Integer>(50),一个包含 Integer 个对象的列表,其中初始容量为 50 个。

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

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