美文网首页
Java基础之泛型

Java基础之泛型

作者: wqbu | 来源:发表于2017-08-02 11:28 被阅读0次

一些术语

  1. 参数化类的类型(parameterized type):含有类型参数的类型,例如List<String>
  2. 原生态类型(raw type):没有类型参数的类型,例如List
  3. 无限制通配符类型(unbounded wildcard type):例如List<?>

原生态类型保留的原因:兼容性

List, List<Object>, List<String>, List<?>的讨论

  1. 形如List的是原生态类型,是类型不安全的,逃避了泛型检查
  2. List<Object>明确告诉编译器它可以持有Object类型的对象,List<String>明确告诉编译器它可以持有String类型的对象,但是List类型的引用可以接受List<Object>,List<String>的实例对象,但是List<Object>的引用不可以接受List<String>的实例对象。也就是所谓的泛型集合是不具有协变性(covariant)的.
  3. 无限制通配符类型如List<?>说明该List持有某种特定类型的对象,但是不知道具体是哪一种类型,所以不能向这种List中添加任何对象,因为编译器并不能 判定这种添加是否是正确的,所以会在编译阶段报错。相比原生态类型,List则可以添加任何对象,因为编译阶段并没有做类型检查。

优先使用列表而不是数组

数组是协变的(covariant),所谓数组是协变的,是指如果Sub是Super的子类型,那么数组类型Sub[]也是Super[]的子类型。

而泛型是通过擦除(erasure)来实现的,泛型是只在编译时强化它们的类型信息,并在运行时丢弃它们的元素类型信息。所以泛型不是协变的,上面第2条List<Object>并不是List<String>的父类。

所以数组和泛型不能很好的混用,如创建泛型对象数组:new E[],参数化类型或者类型参数的数组:new List<E>[], new List<String>[]是非法的。

类型擦除对泛型的限制

由于泛型仅仅是在编译时有了较强的类型检查,而实际编译后所产生的是没有泛型信息的运行代码,所以这导致泛型有许多限制。

  1. 泛型类中,static方法和static域均不可引用类的类型变量
  2. 不能实例化泛型类型实例,也就是使用类似于new T()的形式
  3. 不能实例化泛型数组

Comparable<T>接口

实现Comparable<T>接口,实现其中的compareTo方法可以使对象的对比更高效。

参考文献:使用通配符简化泛型使用

相关文章

  • Java基础之泛型

    Java基础之泛型 泛型基本介绍 简单介绍在jdk1.6之前,还没有使用到泛型,Java类型分为原始类型、复杂类型...

  • 详解Java泛型之3——十分钟理解泛型擦除

    前面我们介绍了泛型以及通配符的基础概念,可以参考文章: 详解Java泛型之1——入门泛型必懂的知识点[https:...

  • Java 泛型

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 为什么会有泛型? 泛型类 泛型方法 泛...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java基础之泛型

    转载: https://blog.csdn.net/s10461/article/details/53941091...

  • java基础之泛型

    Java 泛型,你了解类型擦除吗? 1. 函数上的泛型定义 当函数中使用了一个不明确的数据类型,那么在函数上就可...

  • Java 基础 之 泛型

    一:什么是泛型 泛型在我们的代码中使用非常广泛的一部分知识,今天就系统的把泛型总结一下,并记录自己的学习历程...

  • Java基础之<泛型>

    泛型类和泛型方法 泛型是Java语言中实现程序多态的一种重要方法,泛型多用于底层代码中,以此来保证代码的通用型。今...

  • Java基础之泛型

    一些术语 参数化类的类型(parameterized type):含有类型参数的类型,例如List 原生态类型(r...

  • JAVA基础之泛型

    1、为什么引入泛型 bug是编程的一部分,我们只能尽自己最大的能力减少出现bug的几率,但是谁也不能保证自己写出的...

网友评论

      本文标题:Java基础之泛型

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