今日学习内容:
1.泛型(Generics):
泛型广泛的,,普通的类型
泛型能够帮助我们把类型明确的把工作推迟到创建对象或者调方法的时候
我定义类时,不需要考虑这个数组到底存什么类型
2.泛型的修饰:
1.泛型法
2.泛型方法
3.泛型接口
泛型类把泛型定义到类上,用户在使用类时,才能把类型给确定
具体的使用方法就是使用一对<>加上一个未知数。通常用T K V E等大写字母表示
当我们在一个类后面加上了泛型<T>,这个T就是一个数据类型
既然T就是一个数据类型,那我们就可以拿过来用
泛型方法:
我们如果之关心某个方法,可以不定义泛型类
只定义泛型方法
泛型方法不一定在泛型类里
泛型类里也不一定一定要有泛型方法
在定义泛型方法时首先要定义泛型类型
定义在方法之间,泛型使用处之前
eg:public <T> T show(参数){
return 参数
}
使用泛型最好要有返回值
3.继承关系
泛型类在继承时:
1.父类是一个泛型类,子类随便
2.泛型的声明只能在当前类名后或方法之间,而且声明的泛型时自己的
3.在子类继承父类时,子类泛型和父类泛型都写出来时,父跟子
4.如果在继承时,没有写出任何泛型,当前子类不是泛型类
如果在一个泛型类中,尽量就不要再使用泛型方法
泛型方法多数都是出现在非泛型类中
4.静态方法:
静态方法如果是泛型方法,泛型的声明必须写出来
因为静态结构是属于类的,不属于某个对象
5.类型擦除:
为了兼容性,使用原始类型(没有泛型)是可以的
泛型刚刚出现时,还存在大连的不适用泛型的代码
为了保持兼容性,java泛型中,其实有一种类似伪泛型,因为java在编译期间
所有的泛型都会被擦掉
6.泛型语法:
java的泛型语法式在编译期这个维度实现
正常来说在生成的字节码文件中,不包含泛型的类型信息的
可以理解为泛型的本质就是让程序员在编写代码时遵守的一个规则
比如SuperArray:在确定了泛型之后,这个超级数组中就只放统一类型
如果放入其他类型,编译不通过
7.泛型的应用场景:
1.父类(接口):起到的是一个规范的作用,对里面的数据类型没有明确的要求
2.容器类:超级数组,链表,队列等
8.枚举类型:
应用场景:
在某些情况下,一个类的对象的个数是有限的
规定这个类的对象的个数。
9.枚举类中:
把需要用到的对象声明出来
写对应的构造器
可以有set,get方法
10.单例模式:
使用枚举类实现单例模式
单元素的枚举类型已经称为实现单例模式最佳方案
11.枚举的优势:
1.int 类型不具备安全性,假如某个程序员在定义int时少写了个final,会存在被他人修改的风险
枚举类,它天然就是一个常量类
2.使用int类型,语义不够明确
枚举里面都是静态常量
推荐枚举的比较使用 ==