美文网首页
Java -

Java -

作者: CaryZheng | 来源:发表于2022-07-18 17:16 被阅读0次

    示例类的继承关系如下所示:

    class A1 {}
    
    class A2 extends A1 {}
    
    class A3 extends A2 {}
    
    class A4 extends A3 {}
    

    1. <? super T>

    <? super T> 表示类型下界,表示参数化类型是此类型的超类型(父类型),直至 Object

    // 示例代码
    List<? super A3> mylist1 = new ArrayList<>();
    mylist1.add(new A3());
    mylist1.add(new A4());
    mylist1.add(new A2());  // compile error
    mylist1.add(new A1());  // compile error
    
    A3 temp1 =  mylist1.get(0);     // compile error
    

    T 表示为 A3 类型时,插入 A3A4 实例是可以的,因为 A4A3 子类。但是插入 A2A1 实例就会报错,因为无法接收 A3 的父类实例。

    另外,A3 temp1 = mylist1.get(0); 也会报错,因为获取到的元素无法得知是 A3 的哪个父类。

    2. <? extends T>

    <? extends T> 表示类型的上界,表示参数化类型可能是 TT 的子类。

    // 示例代码
    List<? extends A3> mylist2 = new ArrayList<>();
    mylist2.add(new A4());      // compile error
    mylist2.add(new A3());      // compile error
    mylist2.add(new A2());      // compile error
    mylist2.add(new A1());      // compile error
    
    A3 temp2 = mylist4.get(0);
    

    T 表示为 A3 类型时,A3 的子类是不确定的,所以无法插入元素。但是 A3 temp2 = mylist4.get(0); 是可以获取的,因为获取到的肯定是 A3A3 的子类类型。

    相关文章

      网友评论

          本文标题:Java -

          本文链接:https://www.haomeiwen.com/subject/hrrdirtx.html