数据结构基础准备:包装类 泛型 泛型的上界 密封类
目录
数据结构总览:
包装类
泛型
泛型的上界
密封类
数据结构总览:
包装类
在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。
基本数据类型和对应的包装类
泛型
问题1.存放数据太乱了什么都能放。
2.每次取数据的时候,都要强转。所以,泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型
1.类名后的<T>代表占位符,表示当前类是一个泛型类
1语法
泛型类<类型实参>变量名;//定义一个泛型类引用
new泛型类<类型实参>(构造方法实参);//实例化一个泛型类对象2示例
MyArray<Integer> list = new MyArray<Integer>();注意:泛型只能接受类,所有的基本数据类型必须使用包装装
在编译的过程当中,将所有的T替换为Object这种机制,我们称为:擦除机制。
Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。
代码没报错 为什么?JDK5引入的。兼容以前的版本!!!
泛型的上界
在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。
1语法
class泛型类名称<类型形参extends类型边界>{2.实例
public class MyArray<E extends Number> {
只接受Number的子类型作为E的类型实参
密封类
密封类一般应用在类和接口中,对接口和类的实现和继承进行约束。主要使用的关键字是final。当这个类被final修饰了,被修饰的类就变成完全封闭的状态了,所有类都没办法继承
JDK17提供了一个新的关键字:sealed.密封类除了可以被该该关键字修饰,并且在声明未尾用permits表示要开放给哪些类型。
下述代码Animal为密封类,然后使用 permits关键字,把继承权限开放给了Dog类sealed修饰的类必须要有子类
使用non-sealed关键字修饰:表示不限制,任何类都可以继承。
未被permits允许的类型,则没办法继承
//sealed修饰Animal代表当前类是密封类 必须有子类
//Dog这个类 没有限制可以被任何类继承
没有写就是都允许,但是一旦写了以后,写谁就只允许谁。