擦拭法 java 泛型_廖雪峰Java4反射与泛型-3范型-4擦拭法

子类的类型是IntPair

Pari.java

```#java

package com.testArray;

public class Pair{

private T first;

private T last;

public Pair(T first,T last){

this.first = first;

this.last = last;

}

}

IntPair.java

```#java

package com.testArray;

public class IntPair extends Pair{

public IntPair(Integer first,Integer last){

super(first,last);

}

}

package com.testArray;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

public class Main {

public static void main(String[] args){

Pair p = new Pair<>("xiao","ming");

IntPair ip = new IntPair(1,2);

System.out.println(p instanceof Pair);

System.out.println(ip instanceof Pair);

System.out.println(ip instanceof IntPair);

//getSuperClass()获得该类的父类

//getGenericSuperclass()获得带有泛型的父类

//Type是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。

Type type = IntPair.class.getGenericSuperclass();

//ParameterizedType参数化类型,即泛型

ParameterizedType pt = (ParameterizedType) type;

//getActualTypeArguments获取参数化类型的数组,泛型可能有多个

Type[] types = pt.getActualTypeArguments();

Class> clazz = (Class>) types[0];

/**

* ? 表示不确定的java类型。

* T 表示java类型。

* K V 分别代表java键值中的Key Value。

* E 代表Element。

*/

System.out.println(clazz);

}

}

aeea34194871f8c9391fc4135aa3e5a1.png

总结:

* Java的泛型是采用擦拭法实现的

* 擦拭法决定了泛型:

* 不能是基本类型,例如int

* 不能获取带泛型类型的Class,例如Pair.class

* 不能判断带泛型类型的类型,例如: x instanceof Pair

* 不能实例化T类型,例如new T()

* 泛型方法要防止重复定义方法,例如public boolean equals(T obj)

* 子类可以获取父类的泛型类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值