泛型类里的泛型方法中的泛型参数T t,在这个泛型方法中获取这个t参数的class类对象
时间: 2023-07-08 18:17:13 浏览: 87
可以使用`getClass()`方法获取泛型参数`T`的`Class`类对象。示例代码如下:
```java
public class GenericClass<T> {
public void genericMethod(T t) {
Class<?> clazz = t.getClass();
System.out.println(clazz.getName());
}
}
```
在上述代码中,`genericMethod`方法中的参数`T t`是泛型参数,可以通过`t.getClass()`获取泛型参数`T`的`Class`类对象。当然,需要注意的是,在运行时,泛型类型信息会被擦除,所以无法直接获取泛型类型的实际类型参数。
相关问题
泛型参数在方法里获得class类对象
可以使用Java的反射机制获取泛型参数的class类对象。具体实现可以通过以下代码:
```java
public static <T> Class<T> getGenericType(Class<?> clazz) {
Type type = clazz.getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
Type[] typeArguments = paramType.getActualTypeArguments();
if (typeArguments != null && typeArguments.length > 0) {
Type typeArgument = typeArguments[0];
if (typeArgument instanceof Class) {
return (Class<T>) typeArgument;
}
}
}
return null;
}
```
调用该方法时,传入包含泛型参数的类的Class对象,即可获取泛型参数的Class对象。例如:
```java
public class Test<T> {
public Class<T> getType() {
return getGenericType(getClass());
}
}
public class Example extends Test<String> {
// ...
}
// 获取Example类中泛型参数的Class对象
Class<String> type = new Example().getType();
```
java获取泛型T的class对象
Java中获取泛型T的class对象的方法有以下几种:
1. 在类定义时指定泛型类型,直接使用泛型类的class对象即可。
```java
public class MyGenericClass<T> {
private Class<T> clazz;
public MyGenericClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getClazz() {
return clazz;
}
}
```
2. 使用泛型方法,通过反射获取方法的返回类型,从而得到泛型T的class对象。
```java
public class MyGenericClass {
public static <T> Class<T> getGenericType(Class<?> clazz) {
Type superClass = clazz.getGenericSuperclass();
if (superClass instanceof ParameterizedType) {
Type[] types = ((ParameterizedType) superClass).getActualTypeArguments();
if (types.length > 0 && types[0] instanceof Class) {
return (Class<T>) types[0];
}
}
return null;
}
}
```
3. 使用TypeReference类,它是FastJson库中的一个工具类,可以获取泛型T的class对象。
```java
public abstract class TypeReference<T> {
private final Type type;
protected TypeReference() {
Type superClass = getClass().getGenericSuperclass();
type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() {
return type;
}
}
```
使用时只需要继承TypeReference类,并实现泛型T的具体类型。
```java
public class MyGenericClass extends TypeReference<List<String>> {
public MyGenericClass() {
System.out.println(getType()); // class java.util.List<java.lang.String>
}
}
```
阅读全文