1、泛型是什么,什么是泛型擦除
- 泛型是啥?
- 泛型就是一种不确定的数据类型。本质是参数化类型。
- 泛型提供了编译时类型安全检测机制,允许在编译时检测到非法的类型。
- 泛型就是一种不确定的数据类型。本质是参数化类型。
- 没有泛型的时候,通过对类型 Object 的引用,假设时子类String实现,那么则编译器不会对静态类型Object做限制,输入可以是任意类型,比如Integer。然后输出时,
强制类型转换
为实现的子类String时,就会报错。这存在安全隐患
- 泛型的好处就是编译的时候能够检查类型安全,并且所有强制转换都是自动隐式的
- 让方法在编译前不知道具体类型,扩展性更强
- 静态域不能用,因为泛型在new对象之后才知道,而类的构造方法在这之前
- 不能捕获泛型对象,因为泛型擦除,会让多个泛型扩展的exception变的一样,无法区分,所以java才禁用
- 泛型擦除是啥?
- 代码上写的泛型是伪泛型,标记用的,编译时会擦除。 看我这篇文章Java 泛型擦除 - 掘金 (juejin.cn)
2、List< String>能否转为List< Object>
- 下面这个不通过。
List<String> strs = new ArrayList<Integer>();
List<Object> objects = strs;
- 强制类型转换下就ok
List<String> strs = (List)new ArrayList<Integer>();
List<Object> objects = (List)strs;
- 但存在安全隐患
List<String> strs = (List)new ArrayList<Integer>();
List<Object> objects = (List)strs;
objects.add(123);
String str = strs.get(0);//运行时报错,编译时不报错
3、 Java的泛型中super 和 extends 有什么区别?
- 看我的这篇文章Java 泛型通配符 - 掘金 (juejin.cn)
- 补充一点PECS原则Producer Extends Consumer Super。
- 生产者只读不写制造者 out协变,
- 读出我自身的东西给到外边,那就是生产
- 消费者只写不读消费者 in逆变。
- 把外边的东西写到我自己的里边,那就是消费
- 生产者只读不写制造者 out协变,
4、啥是注解?有哪些使用场景
-
一个注解准确意义上来说,只不过是一种特殊的注释而已,如果没有解析它的代码,它可能连注释都不如。
-
注解是一系列元数据,它提供数据用来解释程序代码
- 编译器利用注解来检测错误和警告
- 编译时,利用注解生成代码或者文档
- 运行时,代码可以提取注解的内容
- 但标签只是标签,不是代码的一部分
-
使用场景
- 代码配置和元数据标记
- 依赖注入
- 自动化处理
- 权限控制
- 日志记录
- 断言和测试
- 注解处理器
- 在Android开发中,它们通常与依赖注入、权限管理、日志记录、代码生成等相关领域一起使用。