了解Java API文档中的符号

时间:2012-09-06 10:39:50

标签: java javadoc

我是java语言的新手,并且一直在阅读API文档。我想知道是否有人可以帮助我解决一些符号的含义?例如,在PriorityQueue中有:

Constructor Summary
...
PriorityQueue(Collection<? extends E> c)
...

Method Summary
...
<T> T[]
...

我的问题是'?','E','c'和'T'。我想我已经解决了一些问题,比如'T',我认为是Type。如果有人能帮助理解,我会非常感激。描述网站的链接会很棒!谢谢!

3 个答案:

答案 0 :(得分:3)

你是对的,T是一个类型参数。在这种情况下,它可以被任何类型替换,因为它没有约束。

此构造函数具有类型约束:

PriorityQueue(Collection<? extends E> c)

应该被理解为:使用PriorityQueue创建一个新的Collection实例作为类型参数,任何扩展类型E的类型(包括E本身),其中EPriorityQueue的类型参数。例如:

List<String> list = new ArrayList<String>();
PriorityQueue<String> pq = new PriorityQueue<String>(list);

在这种情况下,Epq的类型参数)为Stringlist的类型参数与谓词? extends E匹配,因为它是StringList<String> list = new ArrayList<String>(); PriorityQueue<Object> pq = new PriorityQueue<Object>(list);

这也有效:

String

因为ObjectList<String> list = new ArrayList<String>(); PriorityQueue<Integer> pq = new PriorityQueue<Integer>(list); 的子类,但这在编译时会失败:

{{1}}

我建议您阅读有关Java泛型here的更多信息。

答案 1 :(得分:1)

它们是Java Generics的示例。

具有如下签名的方法:

<T> public T doSomething(T t);

表示可以为任何类替换T.第一部分告诉编译器你要使用T作为通配符,public T只是返回值,而()之间的T是参数的类型。

这意味着您可以调用此方法,如:

final Integer someInt = doSomething(new Integer(5));

但不是这样的:

final Integer someInt = doSomething(new Double(5));

参数和返回值必须相同..

您还可以限制T可以是什么,例如:

<T extends Number> public T doSomething(T t);

然后该方法只能应用于Numer的子类,因此您将拥有:

final Integer someInt = doSomething(new Integer(5)); //allowed

final List someList = doSomething(new List()); //not allowed

?有点相同,当你有“?extends E”时,它意味着任何对象是E(或E本身)的子类。

答案 2 :(得分:0)

你应该学习一些基本的java概念.Stack Overflow的java tag有很多信息。

标记的<? extends E>表示通配符通用参数,该参数可以是参数化类型扩展集合的任何通用集合。

使用该类时,程序员将替换“参数”E,例如ArrayList<String>

<T>是通用类声明。

T[]是数组。

c是变量声明。