泛型通配符放置和获取规则

时间:2014-07-07 21:26:55

标签: java generics

我知道这种方式是不可能的:

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();

谢谢你, 杆

0 个答案:

没有答案