Android技术知识Android开发Android开发经验谈

Android工程师必备基础技能(二)泛型

2022-08-30  本文已影响0人  躲得过初一躲不过十五

如果想整体性的学习,可以从上一篇看起
Android工程师必备基础技能(一)注解 - 简书 (jianshu.com)

1.为什么需要泛型?

1.1.泛型类和泛型方法、泛型接口的定义

泛型类

public class A<T>{
   private T data; public A(T d){
   } 
    public T getData(){
      return data;
   }
   ……
}

泛型接口:

     public interface impl<T>{public T method();}
        //定义1
    
       class impls<T> implements impl<T>{
    }
       //调用1,也是泛型
    
       class impls implements impl<String>{
     public String method();
    }
      //调用2,指定了具体类型

泛型方法: (完全独立,不一定要声明在泛型类和泛型接口中)

      public <T> T method(T,……) {
      } 
       <T>泛型方法的标志
    
      class.<String>method();
       //调用1
    
      class.method();
      //调用2

1.2.泛型方法辨析

正确判断泛型方法: <T>开头

1.3.限定类型

extends :指定泛型类派生于哪个类/接口

public class <T extends c&i>

public <T,V extends c&i> T method(T a,V b);

类和接口混用,类要放在开头,有且只能有1个类

1.4.泛型中的约束和局限性

  Test<T>   
  
  Test<Float>[] arrays;
     //可以
  
  Test<Float>[] arrays = new Test<Float>[10];
    //不可以
 public  <T extends Throwable> void doWork(T x) {
  
      try{}catch(T x){
 }
      //不行
  
      try{} catch(Throwable e) throw T{throw t;}
      //可以
  
 }

1.5.泛型类型的继承规则

1.6.通配符类型

解决继承规则中C<A>和C<B>没有任何关系的局限。

 class<T> A;

      method(A<? extends/super B>)

      ? extends B:主要用于安全的访问数据,访问类型B

限定了泛型类型的上限;必须派生B的派生类;调用时增加

get一定是B;set不能用。

限定了泛型类型的下限;必须是B的超类;

设置只能设置本身和子类,返回只能返回Object,主要用于安全的写入数据.

1.7.虚拟机如何实现泛型

类型擦除 T 擦除成Object,T extends A,擦除成A(第一个)。实现接口时,在适当的位置加强制类型转化

重载时,泛型参数的类型不通过。

下一篇:Android工程师必备基础技能(三)Retrofit中的注解原理项目实践

上一篇 下一篇

猜你喜欢

热点阅读