泛型入参如何获取正确对象类型
时间: 2023-08-11 15:39:58 浏览: 251
在 Java 中,可以使用反射来获取泛型入参的正确对象类型。具体来说,可以通过以下代码获取泛型入参的 Class 对象:
```java
public class Example<T> {
public void method(T param) {
Class<T> clazz = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
// ...
}
}
// 使用示例
public class ExampleImpl extends Example<String> {
// ...
}
```
在这个示例中,`Example` 类定义了一个泛型参数 `T`,并在 `method` 方法中接受一个 `T` 类型的参数 `param`。在 `method` 方法中,可以通过反射获取当前类的泛型超类(即 `Example<String>`)的泛型参数类型的 Class 对象。
具体来说,可以使用 `getClass().getGenericSuperclass()` 方法获取当前类的泛型超类的 `Type` 对象,然后使用 `(ParameterizedType)` 强制转换为 `ParameterizedType` 类型,最后通过 `getActualTypeArguments()` 方法获取泛型参数类型的数组,取第一个元素即可。由于泛型参数类型在编译时已经确定,因此这样的类型转换是安全的。
需要注意的是,这种方式只适用于泛型超类(即 `Example<String>`)中的泛型参数类型,对于其他类型的泛型参数(如泛型方法参数)则需要使用其他方式来获取泛型参数类型。
阅读全文