Java 如何声明getParameterTypes()返回的类型的变量?
我想声明一个由getParameterTypes()返回的类型的变量,但出现了一个错误。对于getTypeParameters()“无法解析为类型”,我也会遇到相同的错误 如何做到这一点Java 如何声明getParameterTypes()返回的类型的变量?,java,generics,reflection,Java,Generics,Reflection,我想声明一个由getParameterTypes()返回的类型的变量,但出现了一个错误。对于getTypeParameters()“无法解析为类型”,我也会遇到相同的错误 如何做到这一点 Class<?> lcSeqHolder = null; TypeVariable<Method> lcTypeHolder = null; // Use reflection to find the take method Method[] lcMethods = m
Class<?> lcSeqHolder = null;
TypeVariable<Method> lcTypeHolder = null;
// Use reflection to find the take method
Method[] lcMethods = mcSpecificReader.getDeclaredMethods();
for (Method lcMethod : lcMethods)
{
System.out.println(lcMethod.getName());
if (lcMethod.getName().equals(TAKE_METHOD_NAME))
{
lcSeqHolder = lcMethod.getParameterTypes()[SEQUENCE_HOLDER_ARG_INDEX];
lcTypeHolder = lcMethod.getTypeParameters()[SEQUENCE_HOLDER_ARG_INDEX];
lcSeqHolder var1; // <-- lcSeqHolder cannot be resolved to a type
lcTypeHolder var2; // <-- lcTypeHolder cannot be resolved to a type
}
}
Class-lcSeqHolder=null;
类型变量lcTypeHolder=null;
//使用反射查找take方法
方法[]lcMethods=mcSpecificReader.getDeclaredMethods();
对于(方法lcMethod:lcMethods)
{
System.out.println(lcMethod.getName());
if(lcMethod.getName().equals(取方法名称))
{
lcSeqHolder=lcMethod.getParameterTypes()[SEQUENCE_HOLDER_ARG_INDEX];
lcTypeHolder=lcMethod.getTypeParameters()[SEQUENCE\u HOLDER\u ARG\u INDEX];
lcSeqHolder var1;//您不能,而且几乎肯定不需要。变量的类型需要在编译时知道,而您显然不知道
大多数情况下,您应该将变量声明为Object
——毕竟,这就是您真正了解的变量类型。如果您确实了解更多(出于某种原因),请使用您知道的任何内容(例如,某个接口)声明它们,并进行适当的强制转换
假设您没有更多的信息,您将无法使用更具体的类型-那么您希望从声明变量为特定类型中获得什么呢?所有类都扩展对象。您可以将该类型设置为该类型。您需要在类型lcSeqHolder上设置对象吗?尝试以下操作:
Object var1 = lcSeqHolder.newInstance();
仅当lcSeqHolder定义的类具有默认构造函数时,它才起作用。您知道lcMethod.getParameterTypes()
和lcMethod.getTypeParameters>返回的类型的可能值吗?是否必须导入类,或者它们是String
或Integer
之类的类型?