Java - <> 有什么用途,它的名称是什么?

6

我正在研究一些示例代码,然后出现了这个:

public abstract class RandomPool<T> extends Pool {
     //Class...
}

<>是什么用途?为什么只有T在里面?这对我来说似乎非常随机。但是,我如何从更长远的角度使用它来编写程序?

谢谢,如果需要添加更多细节,请告诉我!


谢谢大家的回答!我会仔细阅读Java泛型文档,并确保我理解了所有内容 - 然后根据我从文档中的理解接受最具描述性的答案。 - Curtain
7个回答

10

我必须使用字母T吗?还是可以随意选择其他字母? - Curtain

3

泛型

T 是一个占位符,代表在运行时使用的任何类型。例如,您可以使用:

RandomPool<String> pool;

T在这种情况下指的是String

阅读Java泛型教程


3
那个东西被称为类型参数
基本上,你的类RandomPool是一个泛型类。它有一个类型参数,以便可以使用调用者提供的不同类。看看Java集合,比如List,就会更清楚了。
另外,请注意T不是关键字,你可以任意命名类型参数。只是习惯上使用T表示Type,有些集合使用E表示Element。

1

使用 Java 的方式(泛型)来实现模板(在 C++ 中)。T 代表您想要为特定实例化对象使用的元素类型。

您可以通过查看以下示例轻松理解泛型:

Hashmap <String, int> hm = new HashMap<String,int>();
hm.put("k1",1);
hm.put("k2",2);

Iterator it = hm.iterator();

while (it.hasNext()){
    String curr = it.next();
    int value = hm.get(curr);
}

在这里,您可以了解到Hashmap有2种类型(通用类型,您可以使用任何您想要的..从本地到自定义类等等)。 在您发布的示例中,RandomPool应该使用特定的自定义类型进行实例化!因此,当您决定使用它时,应以以下方式编写代码(即):
RandomPool<String> myR = new RandomPool<String>();

1
这是如何声明您的类接受的泛型类型。您提供的示例如下:
抽象类 ObjectPool 的类型为 T,扩展自 Pool

1
非常简短的描述,T是一个编译器变量。使用您发布的代码,您可以拥有一个字符串的随机池,例如:RandomPool<String>,一个Foo的随机池,例如:RandomPoo<Foo>,...... 几乎任何东西。
请在阅读dom farr的链接时记住这一点。

1

这并不是什么高深的东西。这只是Java中用于一阶参数多态性的语法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接