1

我正在尝试使用charts4japi,其中一个构造函数具有以下功能:

public static Data newData(List<? extends Number> data)

对我来说,它看起来像是某种形式的泛型,但我以前从未见过这种表示法,我也不明白。

4

6 回答 6

5

这是一个上限通配符: ? extends Number

这意味着data可以是任何事物Number或子类的列表,例如List<Number>, List<Integer>,List<Double>等。

Java 中的泛型不是协变的,所以 aList<Double>不是 a List<Number>。在这里,类型参数List<? extends Number>允许List<Double>以及List<Number>,但类型参数List<Number>不允许List<Double>

至于List部件,它可以是任何实现的东西List,例如LinkedList<Integer>ArrayList<Double>

于 2013-07-26T17:39:01.610 回答
1
public static Data newData(List<? extends Number> data)

这定义了一个方法,该方法接收实现List接口的集合(ArrayList例如),该集合包含类的任何子Number类(甚至Number类本身)。

事实上,这个概念与泛型有关,它被称为上界通配符。长话短说:它允许您编写一个没有特定类型限制的方法,而是一个层次结构限制。

于 2013-07-26T17:39:34.593 回答
1

是的,它是泛型中的通配符。这意味着该方法将接受任何扩展 Number 的类类型列表。

例子:List<Integer>, List<Double>

于 2013-07-26T17:39:44.813 回答
1
<T extends SomeClass>

当实际参数可以是某个类或它的任何子类时使用。所以在你的情况下:

public static Data newData(List<? extends Number> data)

您的方法可以接受 Number 类型的任何类的列表。

要了解有关 Java 泛型的更多信息,请参阅:

http://docs.oracle.com/javase/tutorial/extra/generics/methods.html

于 2013-07-26T17:43:08.027 回答
0

也就是说数据列表只能添加一个Number类型或SubNumber类型的对象,如Double、Integer...

于 2013-07-26T17:47:16.083 回答
0

它是一个泛型类型。这意味着该data参数是任何扩展 Number 的类的列表。即如果你有一个自定义类:

public class Nomber extends number {
    //stuff...
}

它将 aList<Nomber>作为变量。

于 2013-07-26T17:41:20.680 回答