我正在尝试使用charts4japi,其中一个构造函数具有以下功能:
public static Data newData(List<? extends Number> data)
对我来说,它看起来像是某种形式的泛型,但我以前从未见过这种表示法,我也不明白。
我正在尝试使用charts4japi,其中一个构造函数具有以下功能:
public static Data newData(List<? extends Number> data)
对我来说,它看起来像是某种形式的泛型,但我以前从未见过这种表示法,我也不明白。
这是一个上限通配符: ? 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>。
public static Data newData(List<? extends Number> data)
这定义了一个方法,该方法接收实现List接口的集合(ArrayList例如),该集合包含类的任何子Number类(甚至Number类本身)。
事实上,这个概念与泛型有关,它被称为上界通配符。长话短说:它允许您编写一个没有特定类型限制的方法,而是一个层次结构限制。
是的,它是泛型中的通配符。这意味着该方法将接受任何扩展 Number 的类类型列表。
例子:List<Integer>, List<Double>
<T extends SomeClass>
当实际参数可以是某个类或它的任何子类时使用。所以在你的情况下:
public static Data newData(List<? extends Number> data)
您的方法可以接受 Number 类型的任何类的列表。
要了解有关 Java 泛型的更多信息,请参阅:
http://docs.oracle.com/javase/tutorial/extra/generics/methods.html
也就是说数据列表只能添加一个Number类型或SubNumber类型的对象,如Double、Integer...
它是一个泛型类型。这意味着该data参数是任何扩展 Number 的类的列表。即如果你有一个自定义类:
public class Nomber extends number {
//stuff...
}
它将 aList<Nomber>作为变量。