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泛型的擦除的主要内容,如果未能解决你的问题,请参考以下文章