美文网首页
JAVA基础知识之Generic泛型

JAVA基础知识之Generic泛型

作者: 汤太咸啊 | 来源:发表于2021-10-19 23:14 被阅读0次

您有任何问题或意见都可以在评论区回复哦,欢迎大家一起来讨论,共同学习进步

class级别定义时候需要使用"T",不能使用通配符"?",T表示确定的类型,?表示不确定的类型,具体如下:

//Person后边的<>只能放入T,并不能放入?
public class Person<T> {
    T getPerson(){
        return null;
    }
}

但是在method中可以使用通配符"?"
extends表示泛型的上界(表示传入的参数必须是extends后边类型的子类),super表示泛型的下界(表示传入的参数必须是super后边的类型的父类)

public class Person<T extends Object> {
    T getPerson(){
        return null;
    }
    public static void savePerson(List<? extends Object> persons){

    }
}
//通过super限定方法传入的只能是Man以及Man的父类以上
public static void getList(List<? super Man> personList){
    personList.forEach(s-> System.out.println(s));
}
List<Man> list = new ArrayList<>();
list.add(new Man());
getList(list);
//通过extend限定方法传入的只能是Man以及Man的子类
public static void getList(List<? extends Man> personList){
    personList.forEach(s-> System.out.println(s));
}

类型擦除后,如果不指定extends类型会报错,因为不知道obj是哪种类型,所以肯定也不知道其方法有什么?

public class TestGeneric<T> {
    private T obj;
    public TestGeneric(T t){
        obj= t;
    }
    public void test(){
        obj.bits();//报错
    }
}

需要通过extends来指定是那个类型的子类,才可以调用T的方法

public class TestGeneric<T extends HashFunction> {
    private T obj;
    public TestGeneric(T t){
        obj= t;
    }
    public void test(){
        obj.bits();
    }
}

类型擦除时,如果两个方法的定义名称以及范型外面的一切都一样那么会编译报错,因为范型编译时候会类型擦除(实际就是去掉范型的部分),这时就会出现两个同样的方法了,具体如下:

public class TestGeneric {
    public void print(Integer i){
    }
    public void print(String i){
    }
    public void print(List<String> i){
    }
    //会报错,因为范型会导致类型擦除,编译器会认为下面方法和上面方法参数一样
    public void print(List<Integer> i){
    }
}

相关文章

  • JAVA基础知识之Generic泛型

    您有任何问题或意见都可以在评论区回复哦,欢迎大家一起来讨论,共同学习进步 class级别定义时候需要使用"T",不...

  • Java泛型: 类型擦除(type erasure)

    type erasure & reified generic Java的泛型不同于C++的模板:Java泛型是"t...

  • Kotlin 范型之泛型约束、类型投影、星号投影

    一. 泛型约束(Generic constraints) Kotlin 跟 Java 一样,也拥有泛型约束。Jav...

  • Java 泛型(Generic)

    本文在Java 泛型详解的基础上添加注释和增补 泛型的目的 泛型的主要目的之一就是用来指定容器要持有什么类型的对象...

  • 不理解Typescript泛型?看完就理解了

    如何理解泛型 泛型(Generic Type)存在于许多编程语言中,许多刚接触Typescript且没有Java、...

  • Java - 泛型数组

    Java不允许创建泛型数组的原因 Quora - Why-does-Java-prohibit-generic-a...

  • 泛型

    1. 泛型概述 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,...

  • java泛型

    什么是泛型? 泛型(Generic type 或者 generics)是对Java语言的类型系统的一种扩展,以支持...

  • java 泛型

    什么是泛型? 泛型(Generic type 或者 generics)是对Java语言的类型系统的一种扩展,以支持...

  • java泛值的重要性

    什么是泛型? 泛型(Generic type 或者 generics)是对Java语言的类型系统的一种扩展,以支持...

网友评论

      本文标题:JAVA基础知识之Generic泛型

      本文链接:https://www.haomeiwen.com/subject/nguzoltx.html