java - Java泛型

1、什么是Java泛型 / 类型参数 / 什么是泛型类,接口,方法

答:自我总结(可自我发挥):
  Java泛型是在JDK1.5引入的新特性,分为泛型类,泛型接口,泛型方法,它限定了类型参数,在编译时检测不一致的类型,避免运行时异常

  类型参数(暂时就这么理解):将类型参数化,类似于方法中的变量参数,此时将类型定义成参数形式

  泛型类: 在原始类名后面加一个类型参数,也就是将操作的数据类型指定为一个类型参数
  泛型接口:泛型接口的定义和泛型一致
  泛型方法: 在方法返回类型之前加一个类型参数
  (静态的泛型方法,类型参数在 static 之后,方法返回类型之前。
  泛型方法可以在普通类和泛型类中使用)

2、泛型的作用 / 泛型的好处 / 为什么要使用泛型(使用泛型有3大好处)

答:三大作用:
  在编译时进行类型检查,防止类型不同,导致运行时异常
  消除强制类型转换
  增加代码的复用性

3、泛型擦除 / 类型擦除 / 什么是泛型擦除机制 / 泛型原理 / 泛型擦除原理 / java编译期是如何擦除泛型的 / 泛型是如何工作的

答:泛型依靠泛型擦除机制工作的,为了兼容jdk1.5以前的版本,编译期在编译时,首先进行类型检查,然后进行泛型擦除,所有的类型参数替换为它们的上(下)限,
如果有多个限定(T extends class1%class2),则使用第一个边界class作为原始类,
如果泛型类型没有限定(),则用object作为原始类型。

4、通配符 / 限定通配符 / 非限定通配符(无界通配符)/ PECS原则(难点) / 解释一下extends 和super 泛型限定符

在这里插入图片描述
答:非限定通配符:<?> 不限定类型参数
限定通配符分为上界通配符和下界通配符:
上界(限)通配符将未知类型限定为该类型或其子类型,使用 extends 关键字(? extends T)
下界(限)通配符将未知类型限定为该类型或其父类型,使用 super 关键字 (? super T)

PECS原则 (难点)
从集合中获取元素,则把这个集合看成生产者,使用上界通配符
增加元素到集合,把这个集合看成消费者,使用下界通配符

为什么上界通配符只能取?下界只能添加?
为什么下界反之?

上界通配符不能set,只能get
上界通配符主要用于安全访问数据
get的时候,因为规定了上界,get的一定是上界,java向上转型
set的时候,只知道是父类,至于是哪个子类,编译器不知道

下界通配符只能set,不能get
下界通配符主要用于安全放入数据
set的时候,能set下界或者下界的子类
get的时候编译器不知道是下界的哪个父类,故之

5、泛型擦除后为什么还能用反射

答:待研究

6、编写一段泛型程序来实现LRU缓存?(实战)

答:待研究

7、 更多问法:

1、List<? extends T>和List <? super T>之间有什么区别 ?
答:List<? extends T> 是上界通配符,标识类型参数是T或者T的子类

2、List 和 List < object >的区别?
答:编译时不会对原始类型进行类型安全检查,会对带类型参数的进行检查

3、List<?>和List< object >之间的区别是什么?
答:List<?> '?'无限定通配符,表示类型无限制,实质是未知类型的list,
List是任意类型的List

4、List<?> 与 List< T> 类型之间的区别?
答:

//   T 传入一类对象
    <T> void method0(List<T> list) {
        System.out.println(list);
    }
//    ?可以传入多个对象
    void method1(List<?> list) {
        System.out.println(list);
    }

5、Array中可以使用泛型吗
答:待研究

6、难点
Apple extends Fruit
然后有一个容器:Plate类
现定义一个“盘子”,一般人会认为装水果的 盘子 当然可以装苹果,
plate extends plate
但实际上Java编译器不允许这个操作
我们可以这样理解:
苹果 是 水果的子类(水果)
装苹果的盘子 不是 装水果的盘子 子类(盘子)
参考文章:https://mp.weixin.qq.com/s/aHmN5deBpZ88SMSN1ugcpA

文章由个人搜集资料总结,如有错误,欢迎指证!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值