栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

泛型:泛型类与泛型方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

泛型:泛型类与泛型方法

泛型

JDK1.5新特性

优点:

    类型安全:编译时检测类型减少类型转换
泛型类

概念:在类声明体中用到了类型参数。

语法:

public class GenericDemo {
    private T key;

    public GenericDemo(T key) {
        this.key = key;
    }

    public T getKey() {
        return key;
    }

    public void setKey(T key) {
        this.key = key;
    }

    public static void main(String[] args) {
        
        
        GenericDemo integerGenericDemo = new GenericDemo<>(10);
        GenericDemo stringGenericDemo = new GenericDemo<>("abc");
        //如果没有指定具体的数据类型,此时,操作类型是Object
        GenericDemo genericDemo = new GenericDemo("genericDemo");

        System.out.println(integerGenericDemo.key);
        System.out.println(stringGenericDemo.key);
        System.out.println(genericDemo.key);
        //泛型类型在逻辑上可以看成是多个不同的类型,但实际上是相同类型
      System.out.println(integerGenericDemo.getClass()==stringGenericDemo.getClass());	//输出结果为true
    }
}


注意:

    泛型类只支持类类型,不支持基本数据类型(如int),但可以用包装类(如Integer )
泛型标识<>:类型形参

由外部使用类的时候来指定

泛型标识含义
TType
EElement
KKey
VValue
泛型类的继承

    子类也是泛型类,子类和父类的泛型标识要一致。子类也可以扩展泛型标识,但子类中至少有一个泛型标识与父类相同

    子类不是泛型类,父类要明确泛型的数据类型

//1.子类也是泛型类,子类和父类的泛型标识要一致

class Child extends Parent{}

//也可以扩展,但子类中至少有一个泛型标识与父类相同
class Child extends Parent{}

//2.子类不是泛型类,父类要明确泛型的数据类型

class Child extends Parent{}
泛型接口
    实现类不是泛型类时,接口要明确数据类型实现类也是泛型类时,实现类和接口的泛型类型要一致
泛型方法

泛型方法比泛型类更加灵活

泛型类和泛型方法的区别
泛型类实例化类的时候指明泛型的具体类型
泛型方法调用方法的时候指明泛型的具体类型

语法

修饰符  返回值类型 方法名(形参列表){
    方法体... 
}
    public 和 返回类型中间的标识符,可以理解为,声明该方法为泛型方法只有声明了的方法是泛型方法,泛型类中的成员方法不是泛型方法表明,该方法使用泛型类型T,可以使用在返回类型,传入参数列表,方法体里
泛型方法与可变参数
public class GenericDemo {

    public static  void print(E... e){
        for(int i = 0; i < e.length; i++){
            System.out.println(e[i]);
        }
    }

    public static void main(String[] args) {
        GenericDemo.print(1,2,3,4,5);
        GenericDemo.print("a","b","c");
    }
}
类型通配符: ?

概念:用“?”代替具体类型,是类型实参,不是类型形参


public static void showAnimal(ArrayList list){
    for(int i;i animals = new ArrayList<>();
    ArrayList cats = new ArrayList<>();
    ArrayList miniCats = new ArrayList<>();
    
    //showAnimal(animals); 编译报错
    showAnimal(cats);
    showAnimal(miniCats);
}


类型擦除

概念:

JDK1.5以前没有泛型,但泛型代码能很好地和之前版本的代码兼容,是因为,泛型信息只存在于代码编译阶段,

在进入JVM之前,与泛型相关的信息会被擦除

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号