Java 通配符泛型例子
请看下面的代码,其中会发生错误的代码已经注释掉,并且写明了错误类型
总体来说,泛型通配符就是为了支持多态时父子类,接口扩展类之间的相互转换而生
package test; import java.util.ArrayList; import java.util.List; public class GenericTester { public static void 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 } private interface ITest{ public void Test(); } private class TestA implements ITest{ @Override public void Test() { // TODO Auto-generated method stub System.out.println("TestA"); } } private static void TryGeneric1(List<? extends ITest> testList){ for(ITest tester:testList){ tester.Test(); } } private static void TryGeneric2(List<?> testList){ // for(ITest tester:testList) // cause error for(Object tester:testList){ ((ITest)tester).Test(); } } private static void TryGeneric3(List<ITest> testList){ for(ITest tester:testList){ ((ITest)tester).Test(); } } private static void TryGeneric4(List<Object> testList){ for(Object tester:testList){ ((ITest)tester).Test(); }