java简明例举讲解泛型(深入理解java泛型详解)

网友投稿 255 2022-08-09


java简明例举讲解泛型(深入理解java泛型详解)

目录什么是泛型泛型类与接口派生子类泛型通配符类型擦除

什么是泛型

早期的Object类型可以接收任意的对象类型,但是在实际的使用中, 会有类型转换的问题。也就存在这隐患,所以java提供了泛型来解决这个安全问题

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传

递实参。就是说 , 我们可以将类型向参数一样传递过去

//一个泛型类

//T可以为任意字符,如A,a,B等都可以

public class Demo1 {

private T num;

public Demo1() {}

public Demo1(T num) {

this.num = num;

}

public void setNum(T num) {

this.num = num;

}

public static void main(String[] args) {

Demo1 demo1 = new Demo1<>(101);

}

}

如上 , 实际传入时需指明传入的实际类型 , 此处为Integer(泛型不能为int等基本类型,只能为引用类型) , 如果不指明则默认为object型

当然也可以定义多个泛型

public class Demo1 { }

泛型类与接口派生子类

此处我们定义一个Demo2类继承上面的Demo1 类

可以看到 ,这样显然是不行的 , 那么此处有两种解决办法

1. 指明父类泛型的具体类型 ,如 :

public class Demo2 extends Demo1{

}

2. 子类也是泛型类, 如 :

public class Demo2 extends Demo1{

}

子类也是泛型类,子类和父类的泛型类型要一致

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

泛型接口与泛型类的定义及使用基本相同。

泛型通配符

相信很多人都见过这种写法

? 是什么意思呢  , 接着我们来解释

? 代表类型通配符 , 代表传入实参时 , 可以传入为任意类型

例如, 上述demo1 中 new对象也可以这样写

Demo1> demo1 = new Demo1<>(101);

? 只能代表传入的具体实参 , 类上面的是形参,所以?只能具体传入时使用, ? 表示实际传入的参数类型可以是任意的

类型通配符上限 :

类/接口<?extends 实参类型>

// ? extends Number

public static void method(Demo1 extends Number> demo1){

}

public static void main(String[] args) {

method(new Demo1());

}

如上 , 我们在method() 中传入的参数是上述定义的Demo1类类型 ,  ? extends Number的意思就是说我们实际传入的类型上限是 Number , 也就是说, 只有Number 和 Number的子类(此处传入为Integer , Number是Integer的父类)被实际传入才是合法的

类型通配符下限 :

类/ 接口 < ? super 实参类型 >

了解了上限 , 那么下限这里也就不难理解了 , 就是传入的必须是 自己或者自己的父类

public static void method1(DemovNoiEqQBW1 super Number> demo1){

}

public static void main(String[] args) {

method1(new Demo1());

}

此处必须传入Number 或者 Number的父类 (此处传入为Object类)

类型擦除

泛型是Java 1.5版本才引进的概念,在这之前是没有泛型的,但是,泛型代码能够很 好地和之前版本的代码兼容。那是因为,泛到信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉,我们称之为一类型擦除. 泛型类被类型擦除后,相应的类型就被替换成 Object 类型或者上限类型.

http://     就是说 , 泛型只存在于编译期期间 , 真正执行代码的时候 , 是没有泛型这个概念的, 它只是在编译期对我们传入的类型做了约束


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringCloud高可用配置中心Config详解(springcloudconfig作用)
下一篇:详细分析JVM类加载机制(关于jvm的类加载过程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~