泛型:参数化数据类型;类,方法 ,构造器,接口
好处:编译器 进行类型检查;
泛型类:类名 <类型参数>
类型参数:
可以是一个 也可以是多个,用逗号分隔用一个大写字母表示
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的。
----------------------------------------------------------------------------------------------------------------------------------------------