Java中Generics泛型的功能简介说明

乔欣 Java教程 发布时间:2022-11-24 23:04:38 阅读数:13050 1
下文笔者讲述Generics泛型的简介说明

Generics泛型的简介

Generics是泛型的英文单词
  泛型的核心目的:
      参数化类型
  将函数的参数进行类型化

泛型的优势

1.泛化:可使用泛型代表任意的类型
2.提高代码的复用性
3.类型安全性,由于泛型是在使用中指定类型,无需强制转换,所以非常安全
4.泛型可提高运行效率,使用泛型可减少对象的装箱和拆箱操作

泛型示例

泛型中常见的变量

T 类型(Type)
K 键(Key)
V 值(Value)

泛型类设计示例

class GenericsClass<T>{
    private T date;
    
    public T getDate(){
        return this.date;
    }
    
    public void setDate(T date){
        this.date = date;
    }
}
注意事项:
	泛型类的类型参数可以是多个
       如<K,V>,<T,K,V>等。

泛型接口

public interface GenericesInterface<T>{
    public void setDate(T date);
    public T getDate();
}

泛型实现类

class GenericesImpl1 implements GenericesInterface<String>{
    @Override
    public String getDate(){
        return "String";
    }
    
    public static void main(String[] args){
        GenericesImpl a = new GenericesImpl();
        System.out.println(a.getDate());
    }
}

class GenericesImpl2<T> implements GenericesInterface<T>{
    private T date;
    
    public void setDate(T date){
        this.date = date;
    }
    
    @Override
    public T getDate(){
        return date;
    }
    
     public static void main(String[] args) {
        GenericesImplTwo<String> a = new GenericesImplTwo<>();
        a.setDate("String");
        System.out.println(a.getDate());
    }
}

泛型方法

public <T> void genericesMethod(T date){
    System.out.println(date);
}

泛型通配符

上界通配符 <? extents Parent> 可以使用该类及其子类
下界通配符 <? super Child> 可以使用该类及其父类
无限制通配符 <?> 不限制类型

限定泛型类型变量

对类的限定:
public class GenericesClass<T extends list & Serializable>{
   ......
}
对方法的限定:
public static<T extends List>T genericesMethod(T date) {
    ......
}

泛型擦除

泛型擦除:
    指在编译阶段
     将泛型替换为他的边界类型
     即非限定类型变量替换为Object,
	   限定泛型类型则替换为第一个边界限定类型
     
	 如<T extends ArrayList>中T替换成ArrayList
     虚拟机在运行阶段不识别泛型
     泛型擦除本质上还是使用了类型的强制转换
        不过由于编译阶段已经对数据进行过校验,保证数据的一致性
      所以是一种比较安全的转换。

泛型不可协变

Number[] a = new Integer[8]; //正确
List<Number> a = new ArrayList<Integer>; //错误

泛型约束和局限性

泛型类不能实例化
基本数据类型不能作为泛型类型
无法使用instanceof关键字或==判断泛型类的类型
泛型类不能继承Exception或者Throwable
泛型参数是继承关系的泛型类之间是没有继承关系的
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202211/4974.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者