Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何声明getParameterTypes()返回的类型的变量?_Java_Generics_Reflection - Fatal编程技术网

Java 如何声明getParameterTypes()返回的类型的变量?

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

我想声明一个由getParameterTypes()返回的类型的变量,但出现了一个错误。对于getTypeParameters()“无法解析为类型”,我也会遇到相同的错误 如何做到这一点

  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
之类的类型?