Android知识点总结(三):泛型与注解

35 阅读2分钟

1、泛型是什么,什么是泛型擦除

  • 泛型是啥?
    • 泛型就是一种不确定的数据类型。本质是参数化类型。
    • 泛型提供了编译时类型安全检测机制,允许在编译时检测到非法的类型。
    • 泛型就是一种不确定的数据类型。本质是参数化类型。
    • 没有泛型的时候,通过对类型 Object 的引用,假设时子类String实现,那么则编译器不会对静态类型Object做限制,输入可以是任意类型,比如Integer。然后输出时,强制类型转换为实现的子类String时,就会报错。这存在安全隐患
    • 泛型的好处就是编译的时候能够检查类型安全,并且所有强制转换都是自动隐式的
    • 让方法在编译前不知道具体类型,扩展性更强
    • 静态域不能用,因为泛型在new对象之后才知道,而类的构造方法在这之前
    • 不能捕获泛型对象,因为泛型擦除,会让多个泛型扩展的exception变的一样,无法区分,所以java才禁用
  • 泛型擦除是啥?

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逆变。
      • 把外边的东西写到我自己的里边,那就是消费

4、啥是注解?有哪些使用场景

  • 一个注解准确意义上来说,只不过是一种特殊的注释而已,如果没有解析它的代码,它可能连注释都不如。

  • 注解是一系列元数据,它提供数据用来解释程序代码

    • 编译器利用注解来检测错误和警告
    • 编译时,利用注解生成代码或者文档
    • 运行时,代码可以提取注解的内容
    • 但标签只是标签,不是代码的一部分
  • 使用场景

    • 代码配置和元数据标记
    • 依赖注入
    • 自动化处理
    • 权限控制
    • 日志记录
    • 断言和测试
    • 注解处理器
    • 在Android开发中,它们通常与依赖注入、权限管理、日志记录、代码生成等相关领域一起使用。