小渣飞、
2020-12-09 03:22
采纳率: 87.5%
浏览 9
已采纳

关于 java 中的泛型?



import org.junit.Test;

import java.util.ArrayList;
import java.util.List;


public class TessWildcard {
    @Test
    public void test(){
        List<? extends Person> list1 = null;
        List<? super Person> list2 = null;

        List<Student> list3 = new ArrayList<>();
        List<Person> list4 = new ArrayList<>();
        List<Object> list5 = new ArrayList<>();

        // ***********************
        list1 = list4; // list4 符合 list1 小于等于 Person 的规范

        // 这里也没有超出 Person 请问为什么会编译报错
        Student stu = list1.get(0);
    }

    class Person{

    }

    class Student extends Person{

    }
}

本人小白,求通俗易懂的解答

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • aLvXuan 2020-12-09 09:41
    已采纳

    ? extends 上界通配符,list1 的上界为 Person, list1.get(0) ---> Person,Student 继承于 Person,自然不能把 Person 赋值给 Student,跟Java 的继承方面有关系,有关泛型,可以参考一下下面链接 
    https://kaixue.io/kotlin-generics/

    点赞 打赏 评论
  • 菜鸟先飛 2020-12-09 09:47

    list.get(i)取得是集合里面的元素

     

    点赞 打赏 评论
  • 11Jeffrey 2020-12-09 13:01

    student继承了person吗?  如果student是继承了person:

    Student student = (Student)list4.get(0);  // 强制类型转换

    如果你获取的是list3

    Person person = list3.get(0);   // 自动类型转换

     

    点赞 打赏 评论
  • 小渣飞、 2020-12-09 17:30

    嗯嗯谢谢,下面就是简单的面向对象的问题了,报错的哪一行代码我的思维还停留在泛型中。。。

    点赞 打赏 评论

相关推荐 更多相似问题