所以我一直在阅读Oracle提供的泛型教程:http://docs.oracle.com/javase/tutorial/java/generics/
我尝试运行自己的示例以确保我了解如何使用泛型.我有以下代码:
import java.util.*;
public class Generics {
class NaturalNumber {
private int i;
public NaturalNumber(int i) { this.i = i; }
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int i) {
super(i);
}
}
public static void main(String[] args) {
Collection<? extends NaturalNumber> c = new ArrayList<>();
c.add(new EvenNumber(2)); //this line produces a compile time error
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是能够将任何NaturalNumber子类型的对象添加到Collection c中.我不确定为什么这不起作用,通过Oracle的教程阅读也没有启发我.
当你有? extends NaturalNumber,该参数可以是一些其它的子类,NaturalNumber也就是没有丝毫关系到EvenNumber.例如,
Collection<? extends NaturalNumber> c = new ArrayList<OtherNaturalNumber>();
Run Code Online (Sandbox Code Playgroud)
如果OtherNaturalNumber扩展有效NaturalNumber.
因此,您无法将EvenNumber实例添加到列表中.你可以使用这个声明:
Collection<NaturalNumber> c = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
这将允许您添加任何NaturalNumber实例(包括一个EvenNumber).
另一方面,您可能想要创建那些嵌套类static(或者根本不嵌套它们).
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |