我知道这种方式是不可能的:
public abstract class TestChecker<T extends IHandler> extends Observable implements ITestChecker {}
public class MyTest extends TestChecker<FirstHandler> {}
public class SecondTest extends TestChecker<SecondHandler> {}
public static void main(String[] args) {
List<? extends TestChecker<IHandler> > handlers = new ArrayList<TestChecker>();
MyTest myTest = new MyTest();
handlers.add(myTest);
SecondTest secondTest = new SecondTest();
handlers.add(secondTest);
}
正如规则中所描述的那样:
当您只从结构中获取值时使用扩展通配符, 仅在将值放入结构时使用超级通配符,并且 当你得到并放好时,不要使用通配符。
例外情况是:
您不能将任何内容放入使用EXTENDS通配符声明的类型中 除了值null,它属于每个引用类型
您无法从使用SUPER声明的类型中获取任何内容 通配符,但Object类型的值除外,它是一个超类型 每种参考类型
但我不确定我是否真的明白了,为什么这似乎有效:
List<? super TestChecker<? extends IHandler> > handlers = new ArrayList();
谢谢你, 杆