javaSE_day13_泛型

泛型:参数化数据类型;类,方法 ,构造器,接口

好处:编译器 进行类型检查;

泛型类:类名 <类型参数>

类型参数

    可以是一个 也可以是多个,用逗号分隔用一个大写字母表示

    T - type    E - element    K - key    V -value

-------------------------------------------------------------------------------

原生类型

    类型后没有 指定具体的类型参数,这样的类型 叫 原生类型。

----------------------------------------------------------------------------------------

泛型的通配符

?                       无界通配符:可以匹配任意的引用类型

? extends  上限类型 上限 :可以匹配上限类型 和上限类型的子类型

?  super    下限类型 下限 : 可以匹配 下限类 和 下限类的父类

--------------------------------------------------------------------------------------------

类型参数 :可以指定 上限(上界)

注意:

    1.只能指定 上限

    2.还可以指定 多个 上限;

    3.上限可以是 类 也可以是接口

    4.上限 有类 和 接口,那么 要 先 继承类 后 实现接口,类在前 接口在后。

---------------------------------------------------------------------------------------------------------

类型参数 和 通配符区别

1.类型参数 只能指定上限; 通配符 可以指定 上限 和下限;

2.类型参数 可以指定 多个上限; 通配符 只能指定一个上限;

3.类型参数 可以作为一种 类型; 通配符不能表示为 一种类型。

----------------------------------------------------------------------------------------------------------

问题:String -> Object的子类,那么,Point<String>是否 是 Point<Object>的子类型呢?

不是,参数化类型不能继承。

-------------------------------------------------------------------------------------------------------------

问题: Point<String>和Point<Integer>是几个泛型类????

一个。

-------------------------------------------------------------------------------------------------------

类型擦除

1.参数化类型 擦除后 为 原生类型: Point<Integer> -> Point

2.类型参数:使用上界替换

     1)无界类型参数: Poiint<T> -> Object 用Object替换

     2)指定了一个上限的 ,用此上限类型来替换: Point<T extends Base> -> Base

     3)制定了 多个 上限的 ,用第一个上限替换: Point<T extends IA & IB> -> IA

-----------------------------------------------------------------------------------------------------------

重写

  父类 参数 擦除后 与 子类相同

  异常范围 不能 比父类 更大。

-----------------------------------------------------------------------------------------------

排序

自然排序

    按照 Comparable接口 的 方法 compareTo()的规则排序。

问题

外部比较器。

Comparator 函数式接口

--------------------------------------------------

Comparable  和 Comparator区别:

1.Comparable是默认的自然排序的方式:

  Comparator是我们 自己指定的一种排序方式。

2.Comparable的比较 代码 写在 要比较的对象的类型的内部的;

  Comparator 的比较代码 写在 要比较的对象的类型的外部的;

3.Comparable 只能指定一种 默认排序方式;

  Comparator 可以自定义 多种 排序方式。

--------------------------------------------------

枚举类型:

  1.底层 就是class类;

  2.已经继承了一个类  Enum,不能再继承其它的类了;

  3.对于一个 非 抽象的枚举类型 默认是final;

  4.构造器 是 private的;

  5.在枚举类型 的第一行代码处 列举出 所有的 枚举对象(实例);

  6.所有的枚举 对象 都是 public static final的。

  7.当枚举类中定义了抽象方法,那么每个对象的匿名内部类方式

     都必须实现 这个 抽象方法,并且这个枚举类为  abstract的。

----------------------------------------------------------------------------------------------------------------------------------------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容