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

时间:2012-09-14 15:24:44

标签: java generics reflection

我想声明一个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
     }
  }

3 个答案:

答案 0 :(得分:6)

你不能,而且几乎肯定不需要。需要在编译时知道变量的类型,显然你不知道它。

大多数情况下,您应该将变量声明为Object类型 - 毕竟这就是您真正了解它们的所有内容。如果您了解更多(由于某种原因),请用您知道的任何内容(例如某些界面)声明它们并进行适当的转换。

假设您没有任何其他信息,那么无论如何都无法使用更具体的类型 - 那么您希望通过将变量声明为特定类型来获得什么?类型?

答案 1 :(得分:2)

你需要lcSeqHolder类型的对象吗?试试这个:

Object var1 = lcSeqHolder.newInstance();

仅当lcSeqHolder定义的类具有默认构造函数时才会起作用。

答案 2 :(得分:0)

所有类都扩展了Object。你可以把它变成那种类型。