AndroidJava泛型的擦除

Posted 码农搬砖_2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AndroidJava泛型的擦除相关的知识,希望对你有一定的参考价值。

1.泛型的基础概念

泛型实现了参数化类型的概念,使代码可以应用于多种类型。

  • 简单泛型
public class Hold<
public class Hold<T> 
private T a;
public Hold(T a)
    this.a = a;


public T getA() 
    return a;


public void setA(T a) 
    this.a = a;


  • 泛型接口
public interface Generator<T> 
T test();

  • 泛型方法
public class Hold
     public <T> void f(T a)
     System.out.println(a.getClass().getName());
 

2.泛型的擦除

考点:在泛型代码内部,无法获得任何有关泛型参数类型的信息。

  • 考题1
  class c1 = new ArrayList<String>().getClass();
  class c2 = new ArrayList<Integer>().getClass();
  System.out.println(c1 == c2);
  答案:true
  • 考题2
class Frob 
class Fnorkle 
class Quark<Q> 
class Particle<POSITION,MOMENTUM> 

public class LostInformation 
public static void main(String[] args) 
  List<Frob> list = new ArrayList<Frob>();
  Map<Frob,Fnorkle> map = new HashMap<Frob,Fnorkle>();
  Quark<Fnorkle> quark = new Quark<Fnorkle>();
  Particle<Long,Double> p = new Particle<Long,Double>();
  System.out.println(Arrays.toString(
    list.getClass().getTypeParameters()));
  System.out.println(Arrays.toString(
    map.getClass().getTypeParameters()));
  System.out.println(Arrays.toString(
    quark.getClass().getTypeParameters()));
  System.out.println(Arrays.toString(
    p.getClass().getTypeParameters()));

 

/* Output:
[E]
[K, V]
[Q]
[POSITION, MOMENTUM]
*///:~

3.泛型的边界

将某个参数限制为某个类型的子集。为了执行这种限制,Java 泛型重用了extends 关键字。

interface HasColor  java.awt.Color getColor(); 

class Colored<T extends HasColor> 
 T item;
 Colored(T item)  this.item = item; 
 T getItem()  return item; 
 // The bound allows you to call a method:
 java.awt.Color color()  return item.getColor(); 


以上是关于AndroidJava泛型的擦除的主要内容,如果未能解决你的问题,请参考以下文章

java泛型--泛型的擦除

Java泛型用法

Java泛型用法

Java中泛型的介绍与简单使用

java遗珠之泛型类型擦除

java遗珠之泛型类型擦除