- java如何获取泛型的具体类型, 基本代码如下. 目标是可以通过 clazz()方法来输出当前的泛型类型.
import java.math.BigDecimal;
interface Parent<T> {
void clazz();
}
class Child<T> implements Parent<T> {
@Override
public void clazz() {
}
}
public class RefDemo {
public static void main(String[] args) {
Parent<Double> doubleChild = new Child<>();
doubleChild.clazz();// 期望输出 Double.class
Parent<BigDecimal> bigDecimalChild = new Child<>();
bigDecimalChild.clazz(); // 期望输出 BigDecimal.class
}
}
题主你理解错了泛型的用法,泛型是 参数化类型
你的 Parent<T> 中的 T 是个声明了一个参数类型 T ,T 是一个 “参数”, 其传入的值为 java 类。
怎么传值?
在你实现 Parent 接口的时候就是传 参数类型的时候,也就是说 Child 中所有的 T 参数传入的就是 Map
你上面写的代码
Parent<T> 会报错,因为你没有一个叫 T 的java类
Child<T> 的意思是 Cild 这个类也申明了一个 参数类型 T
也就是你在写一个子类继承 Child 的时候需要写上这个 T 具体是什么类型的
当然如果你不写具体的类型,那么你申明的泛型就是 Object 类型的。
你也可以在具体使用的时候写上此时的参数类型是什么
另外,你的 Parent<T> 接口写的是有问题的
你申明了一个 参数类型 T 但是你接口方法却没有使用他,也就是这个 T 参数完全没有用到
你的方法可以改造下
或者
那么你在实现 Parent 的时候,其参数类型就是确定的