suchen

Heim  >  Fragen und Antworten  >  Hauptteil

java - List<?>, List, List<Object>, List<? extends Object>各有什么区别?

List<?>, List, List<Object>, List<? extends Object>各有什么区别?

巴扎黑巴扎黑2888 Tage vor653

Antworte allen(4)Ich werde antworten

  • PHP中文网

    PHP中文网2017-04-17 17:44:19

    我感觉楼上几位的理解都有问题, 首先, List<?>表示无界通配符, 并非表示任意类型, 而是表示一个具体类型, 但是这个具体类型是什么我们编程的时候并不关心; List表示原生list, 没有泛型参数的list, 这个没有什么可以说的, 不推荐使用; List<Object> 表示的是这个list存放的是Object, 只要是Object就可以放入; 最后List<? extends Object>表示一个集合,这个集合存放的是Object具体子类中的某一种, 而非只要是object的子类就可以放入.

    最后我想说的一点是<?>其实和<? extends Object>有点像, 这个像, 体现在他们可以互相匹配,并且不会产生任何警告 比如:

    public class Base
    {
        public static void unbounded(List<?> list){}
        public static void upBounded(List<? extends Object> list){}
    
        public static void main(String args[])
        {
            List<?> list1 = new ArrayList<Object>() ;
            List<? extends Object> list2 = new ArrayList<Object>() ;
    
            unbounded(list2) ;
            upBounded(list1) ;
        }
    }

    不过这些差异仅仅是在编译时编译器产生的, 到了运行时, 由于擦除, 全部都是List<Object>
    我个人的一点理解

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:44:19

    List<?>List:说的是集合里可以放任意类型的对象,单独使用List的话,在Eclipse中会有警告;

    List<Object>:说的是集合里存放Object类型的对象,理解Java中的继承、及向上转型机制,不难发现这个集合其实可以保存任意类型的对象;

    List<? extends Object>:说的是该集合中保存的对象必须是Object类的子类对象;

    具体可以参考《Java核心技术(第一卷)》关于泛型那部分的内容...

    Antwort
    0
  • 高洛峰

    高洛峰2017-04-17 17:44:19

    List是集合中的一种。
    < >代表了泛型类型
    List<?>代表任意类型
    List<Object>表示这个集合中可以放object类型的对象
    List<? extends Object>代表这个集合中可以放任何继承于object类的类型对象

    如果想了解更多集合框架小姿势,可以看看我写的一篇专栏文章,里面有一章是关于集合框架的

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:44:19

    **List<?>, List, List<Object>, List<? extends Object> 区别如下:
    1.了解JDK中的泛型,泛型是为了做类型检查,希望放在Collection中的东西,在编译的时候通过限定<>中的类型,可以做到尽量在编译时候检查出错误,而不要再线上运行的时候再抛异常。
    2.List这样写,在eclipse中下面会有黄线,有警告的。而且也是不规范的写法,其余的都是规范的写法。
    3.List<?>可以放任何类型;List<Object>只可以放Object类型,但由于Object是所有类的父类,所以其他类都可以通过在前面加(Object)强制类型转换,List<? extends Object>也是,可以放任何类或者是Object类本身。
    希望对你有帮助~~**

    Antwort
    0
  • StornierenAntwort