前言

深入讨论Java的泛型与注解在面试中,有助于展示面试者对Java高级特性的掌握程度和应用能力。通过具体例子和实际应用场景来展示这些特性的优势和应用方式,将有助于提升面试者在面试中的竞争力。继上一篇2024最全Android面试题及答案整理2【持续更新】之后,今天给大家分享2024最全Android面试题及答案整理3【持续更新】,有需要的朋友可以收藏了。
在这里插入图片描述

Java深入泛型与注解面试题汇总

3.1 泛型是什么,泛型擦除呢?

  • 这道题想考察什么?
    泛型
  • 考察的知识点
    泛型的特点和优缺点以及泛型擦除
  • 考生应该如何回答
    泛型就是一种就是一种不确定的数据类型。在Java中有着重要的地位,在面向对象编程及各种设计模式
    中都有非常广泛的应用。
    泛型的优点
    我们为什么需要使用泛型:
  1. 适用于多种数据类型执行相同的代码,例如两个数据相加:
    不同的类型,我们就需要增加不同的方法,但是使用泛型那我们的代表将变为:
  2. 编译检查,例如下面代码
    因为我们指定了List泛型类型为String,因此在代码1处编译时会报错。而在代码2处,不再需要做类型强
    转。
    泛型的缺点
  3. 静态域或者方法里不能引用泛型变量,因为泛型是在new对象的时候才知道,而类的构造方法是在
    静态变量之后执行。
  4. 不能捕获泛型类对象
    泛型擦除
    Jdk中实现的泛型实际上是伪泛型,例如泛型类 Fruit ,编译时 T 会被擦除,成为 Object。但是泛型
    擦除会带来一个复杂的问题:
public int addInt(int x,int y){
return x+y;
}
public float addFloat(float x,float y){
return x+y;
}
public <T> T addInt(T x,T y){
return x+y;
}
List<String> list = new ArrayList();
list.add(10);//①
list.add("享学");
String name = list.get(2);//②

Parent类是一个泛型类,在经过编译时泛型擦除后其中 setSrc(T) 将会变为 setSrc(Object) ;而
Child类继承与Parent并且指定了泛型类型为String。那么经过编译后这两个类应该变为:
父类存在 setSrc(Object) ,而子类则是 setSrc(String) 。这明显是两个不同的方法,按照Java的重
写规则,子类并没有重写父类的方法,而是重载。

3.2 List能否转为List

  • 这道题想考察什么?
    掌握PECS原则,灵活运用泛型
  • 考察的知识点
    泛型上下边界
  • 考生应该如何回答
    在Java的泛型语法中,可以使用super和extends关键字指定泛型的上下边界。
    extends
    ? extends T 为上界通配符,也就是说限制类型只能是T 或者 T 的派生类,比如我们存在代表水果的
    Fruit类,代表苹果的Apple类以及代表香蕉的Banana类。苹果与香蕉都是水果,因此:
    那么下面我们使用List集合作为盘子来装水果:
    但是当我们希望往plates中放入苹果或者香蕉时会发现,plates中无法放入任何元素,只能从plates中取
    出元素。

3.3 Java的泛型中super 和 extends 有什么区别?

List<? super Fruit> plates = new ArrayList<>();
Fruit fruit = plates.get(0);//Error
Apple apple = plates.get(0);//Error
Object object = plates.get(0);
plates.add(new Apple());
plates.add(new Banana());

下界<? super T>不影响往里存,但往外取只能放在Object对象里。因为List<? super Fruit> 代表该容器
元素是Fruit或者Fruit的超类。向容器中存储数据,只需要数据类型是Fruit的派生类即可,因为苹果是水
果Fruit,香蕉也是水果Fruit。但是取数据时,无法得知取出来的数据到底时什么类型,所以只能使用
Object来表示。
PECS原则
PECS原则即Producer Extends Consumer Super ,生产使用extends,消费使用super。结合上下界的
特点可知:
经常读取数据,使用Extends;
经常加入数据,使用Super;

3.4 注解是什么?有哪些使用场景?(滴滴)

  • 这道题想考察什么?
    Java基础,高级语言特性
  • 考察的知识点
    注解与其应用场景
  • 考生如何回答
    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 注解是元数据的一种形式,
    提供有关于程序但不属于程序本身的数据。注解本身没有特殊意义,对它们注解的代码的操作没有直接
    影响。
    按照@Retention 元注解定义的注解保留级,注解可以一般常见于以下场景使用:
    SOURCE
    RetentionPolicy.SOURCE ,作用于源码级别的注解,在类中使用 SOURCE 级别的注解,其编译之后的
    class中会被丢弃。可提供给Lint 检查、APT等场景使用。

写在最后

每一章节都是站在企业考察思维出发,作为招聘者角度回答。从考察问题延展到考察知识点,再到如何优雅回答一面俱全,可以说是求职面试的必备宝典,每一部分都有上百页内容,接下来具体展示,完整版可直接下方扫码领取。

第一章 算法和数据结构面试题汇总

在这里插入图片描述

第二章 Java核心基础面试题汇总

在这里插入图片描述

第三章 Java深入泛型与注解面试题汇总

在这里插入图片描述

第四章 Java并发编程面试题汇总

在这里插入图片描述

第五章 Java虚拟机原理面试题汇总

在这里插入图片描述

第六章 Java反射类加载与动态代理面试题汇总

在这里插入图片描述

第七章 网络编程面试题汇总

在这里插入图片描述

第九章 高级UI面试题汇总

在这里插入图片描述

第十章 Framework内核解析面试题汇总

在这里插入图片描述

第十一章 Android组件内核面试题汇总

在这里插入图片描述

第十二章 程序性能优化与数据持久化面试题汇总

在这里插入图片描述

第十三章 开源框架面试题汇总

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐