Java获取泛型真实类型的方法
1、获取父类泛型类的泛型
public abstract class AbstractDao
public Class
ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
return (Class
}
}
public class UserDao extends AbstractDao
public static void main(String[] args) {
UserDao userDao = new UserDao();
Class
System.out.println(actualType.getName());
}
}
2、获取成员变量的泛型
public class User {
private List
public static void main(String[] args) {
try {
Field field = User.class.getDeclaredField("list");
Type genericType = field.getGenericType();
if (genericType != null && genericType instanceof ParameterizedType) {
Type actualType = ((ParameterizedType) genericType).getActualTypeArguments()[0];
System.out.println(actualType.getTypeName());
}
} catch (Exception e) {
}
}
}
3、获取局部变量的泛型,注意:泛型必须以匿名内部类的方式
public abstract class AbstractDao
public Class
ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
return (Class
}
public static void main(String[] args) {
AbstractDao
};
System.out.println(dao.getActualType().getTypeName());
}
}
4、通过接口/父类的匿名内部类作为参数传递到方法
在方法中可以获得匿名内部类继承的父类或实现的接口的泛型的真实类型
AbstractDao如参考例子一,是一个带泛型的抽象类
打印如下:
总结一下如果是继承基类而来的泛型,就用 getGenericSuperclass() , 转型为 ParameterizedType 来获得实际类型如果是实现接口而来的泛型,就用 getGenericInterfaces() , 针对其中的元素转型为 ParameterizedType 来获得实际类型我们所说的 Java 泛型在字节码中会被擦除,并不总是擦除为 Object 类型,而是擦除到上限类型能否获得想要的类型可以在 IDE 中,或用 javap -v
转载:https://blog.csdn.net/qq_30038111/article/details/100611523
https://blog.csdn.net/hj7jay/article/details/54889717
TRANSLATE with x
English
Arabic
Hebrew
Polish
Bulgarian
Hindi
Portuguese
Catalan
Hmong Daw
Romanian
Chinese Simplified
Hungarian
Russian
Chinese Traditional
Indonesian
Slovak
Czech
Italian
Slovenian
Danish
Japanese
Spanish
Dutch
Klingon
Swedish
English
Korean
Thai
Estonian
Latvian
Turkish
Finnish
Lithuanian
Ukrainian
French
Malay
Urdu
German
Maltese
Vietnamese
Greek
Norwegian
Welsh
Haitian Creole
Persian
TRANSLATE with
COPY THE URL BELOW
Back
EMBED THE SNIPPET BELOW IN YOUR SITE
Enable collaborative features and customize widget: Bing Webmaster Portal
Back