猿问

Java泛型超级关键字

Java泛型超级关键字

我读过这些话题

不过,我似乎还是有点迷茫super关键词:

  1. 当我们宣布这样的收藏时:

    List<? super Number> list = null;list.add(new Integer(0));
    //this compileslist.add(new Object());//this doesn't compile

    应该是相反的吗?我们有一个包含(未知类型的)对象的列表,这些对象是Number..所以Object应该适合(因为它是Number),以及Integer不应该。相反的是出于某种原因。

  2. 如果我们有以下代码

    static void test(List<? super Number> param) {
        param.add(new Integer(2));}public static void main(String[] args) {
        ArrayList<String> sList = new ArrayList<String>();
        test(sList);            //will never compile, however...}

    编译上述代码是不可能的(我的理智表明这是正确的行为),但是基本的逻辑可以证明相反的情况:

    String is Object, Object is superclass of Number. So String should work.

    我知道这很疯狂,但这不是他们不允许的原因吗?<S super T>建筑?如果是,那为什么<? super T>是允许的吗?

有人能帮我恢复这个逻辑链中缺失的部分吗?


慕村9548890
浏览 252回答 3
3回答
随时随地看视频慕课网APP

相关分类

Java
我要回答