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;
    }
}
posted @   jzhr  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示