[英]Java Reflection, extract generic type from method
我有一个具有以下签名的java方法:
static <ContentType> Map<Object,ContentType> foo();
我想使用反射根据ContentType
动态更改方法的行为。 为了实现这一点,我必须能够将ContentType
作为对象(可能是java.lang.reflect.Type的实例)进行处理。 有谁知道如何做到这一点? 那有可能吗?
这是不可能的。 Java中的泛型是“语法糖”。 它们仅在编译时使用,但是随后被删除,从不将其放入类文件中。
这个问题对此有一些非常好的信息。
在运行时检查本身可参数化的类型(如java.util.List),无法知道已将参数化为哪种类型。 但是,当您检查声明使用参数化类型的方法时,您可以在运行时看到将参数化类型参数化为哪种类型
Method method = MyClass.class.getMethod("getStringList", null);
Type returnType = method.getGenericReturnType();
if(returnType instanceof ParameterizedType){
ParameterizedType type = (ParameterizedType) returnType;
Type[] typeArguments = type.getActualTypeArguments();
for(Type typeArgument : typeArguments){
Class typeArgClass = (Class) typeArgument;
System.out.println("typeArgClass = " + typeArgClass);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.