20220801_第七小组_张红睿_学习笔记
作者:互联网
Java高级第一天
1. Java泛型
1.1定义
泛型是J2 SE1.5中引入的一个新特性,本质是参数化类型,就是将类型由原来的具体的类型参数化,这种参数类型可以用在类、接口、方法中,分别称为泛型类、泛型接口、泛型方法。
1.2 泛型类
**语法:访问修饰符 (修饰符) class 类名 <泛型类型名称> (extends)(implements) **
public class Test<T>{}
1.3 泛型接口
**语法:访问修饰符 (修饰符) interface 接口名 <泛型类型名称> (extends)(implements) **
public interface Test<T>{}
1.4 泛型方法
语法:访问修饰符 (修饰符) <泛型名称> 泛型名称 函数名(泛型名称 泛型形参名称){ 函数体 }
public <T> T test(T t){ return t; }
1.5 要求:
- 参数化类型T可以写成任意字符,常用的T、E、K、V等表示泛型。
- 泛型不能是基本数据类型,基本类型要用其包装器。
- 实例化泛型类型时,必须指定T的具体类型。
- 泛型类在继承时,在确定子类泛型时,父类的泛型和子类一样。
- 父类是一个泛型,子类可以不写泛型。
- 泛型类中尽量不要使用泛型方法,泛型方法多数出现在非泛型类中。
- 静态泛型方法的泛型声明必须写,因为静态结构属于类不属于某个对象。
1.6 泛型上下边界
- 上限:<? extends BaseClass>
- 下限:<? super ChildClass>
1.7 类型擦除
泛型的代码只存在于编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉,我们称之为类型擦除。
1.7.1 无限制类型擦除
public class Erasure<T>{
private T key;
public T getKey(){
return key;
}
public void setKey(T key){
this.key = key;
}
}
编译后:
public class Erasure<Object>{
public Object key;
public Object getKey(){
return key;
}
public void setKey(Object key){
this.key = key;
}
}
1.7.2 有限制类型擦除
public class Erasure<T extends Number>{
public T key;
public T getKey(){
return key;
}
public void setKey(T key){
this.key = key;
}
}
编译后:
public class Erasure{
public Number key;
public Number getKey(){
return key;
}
public void setKey(Number key){
this.key = key;
}
}
1.7.3 桥接方法
public interface Info<T>{
T info(T t);
}
public class InfoImpl implements Info<Integer>{
@Override
public Integer info(Integer value){
return value;
}
}
编译后:
public interface Info{
Object info(Object t);
}
public class InfoImpl implements Info<Integer>{
public Integer info(Integer value){
return value;
}
// 桥接方法,保持接口和类的实现关系
@Override
public Object info(Object value){
return info((Integer)value);
}
}
2. 枚举
2.1 定义
枚举(enumeration,enum)是一组常量的集合,属于一种特殊的类,枚举对象/属性都使用static + final 共同修饰。
枚举对象名通常都使用大写,可有多个属性。
2.2 自定义实现四季枚举类
public enum Season{
SPRING(1, "春天"),
SUMMER(2, "夏天"),
AUTUMN(3, "秋天"),
WINNER(4, "冬天");
private int value;
private String name;
Season(int value, String name){ // 固定默认为私有
this.value = value;
this.name = name;
}
public int getValue(){
return value;
}
public String getName(){
return name;
}
}
2.3 枚举实现单例
public class Singleton{
private Singleton(){}
private enum SingletonHolder{
INSTANCE;
private final Singleton instance;
SingletonHolder(){
instance = new Singleton();
}
}
public Singleton getInstance(){
return SingletonHolder.INSTANCE.instance;
}
}
标签:return,笔记,class,20220801,value,key,泛型,张红睿,public 来源: https://www.cnblogs.com/blog-J/p/16544065.html