Java 通配符泛型例子
2012-11-07 17:48
239 查看
请看下面的代码,其中会发生错误的代码已经注释掉,并且写明了错误类型
总体来说,泛型通配符就是为了支持多态时父子类,接口扩展类之间的相互转换而生
[java] view plaincopyprint?
package test;
import java.util.ArrayList;
import java.util.List;
publicclass GenericTester {
publicstaticvoid main(String[] args){
GenericTester genericTester=new GenericTester();
List<TestA> list=new ArrayList<GenericTester.TestA>();
GenericTester.TestA tester=genericTester.new TestA();
list.add(tester);
TryGeneric1(list);
TryGeneric2(list);
// TryGeneric3(list); has compile error
// TryGeneric4(list); has compile error
}
privateinterface ITest{
publicvoid Test();
}
privateclass TestA implements ITest{
@Override
publicvoid Test() {
// TODO Auto-generated method stub
System.out.println("TestA");
}
}
privatestaticvoid TryGeneric1(List<? extends ITest> testList){
for(ITest tester:testList){
tester.Test();
}
}
privatestaticvoid TryGeneric2(List<?> testList){
// for(ITest tester:testList) // cause error
for(Object tester:testList){
((ITest)tester).Test();
}
}
privatestaticvoid TryGeneric3(List<ITest> testList){
for(ITest tester:testList){
((ITest)tester).Test();
}
}
privatestaticvoid TryGeneric4(List<Object> testList){
for(Object tester:testList){
((ITest)tester).Test();
}
总体来说,泛型通配符就是为了支持多态时父子类,接口扩展类之间的相互转换而生
[java] view plaincopyprint?
package test;
import java.util.ArrayList;
import java.util.List;
publicclass GenericTester {
publicstaticvoid main(String[] args){
GenericTester genericTester=new GenericTester();
List<TestA> list=new ArrayList<GenericTester.TestA>();
GenericTester.TestA tester=genericTester.new TestA();
list.add(tester);
TryGeneric1(list);
TryGeneric2(list);
// TryGeneric3(list); has compile error
// TryGeneric4(list); has compile error
}
privateinterface ITest{
publicvoid Test();
}
privateclass TestA implements ITest{
@Override
publicvoid Test() {
// TODO Auto-generated method stub
System.out.println("TestA");
}
}
privatestaticvoid TryGeneric1(List<? extends ITest> testList){
for(ITest tester:testList){
tester.Test();
}
}
privatestaticvoid TryGeneric2(List<?> testList){
// for(ITest tester:testList) // cause error
for(Object tester:testList){
((ITest)tester).Test();
}
}
privatestaticvoid TryGeneric3(List<ITest> testList){
for(ITest tester:testList){
((ITest)tester).Test();
}
}
privatestaticvoid TryGeneric4(List<Object> testList){
for(Object tester:testList){
((ITest)tester).Test();
}
相关文章推荐
- Java 通配符泛型例子
- Effective Java(数组和泛型的实现方式、用无限制的通配符提高API的灵活性)
- Java 泛型通配符?解惑
- Java 理论与实践:使用通配符简化泛型使用
- java里程碑之泛型--类型通配符
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- <转>深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取
- Java 泛型-泛型类、泛型方法、泛型接口、通配符、上下限
- [Java 10 泛型] 泛型通配符 Info<?> i = new Info<String>(); 在程序中定义没有方法的接口,称之为标识接口
- java 泛型中 T、E ... 和 问号(通配符)的区别
- Java 泛型通配符?解惑
- 【Java学习笔记】38:三种泛型通配符
- 【Java】java 中的泛型通配符
- Java 5.0 泛型之 通配符
- Java基础:泛型类型的子类及通配符的使用
- java 泛型上下限的例子
- java 普通泛型、 通配符、 泛型接口
- [转贴] Java 理论与实践: 使用通配符简化泛型使用
- Java 泛型类型及其子类以及通配符
- Java 之泛型通配符 - extends T 与 - super T 解惑