2

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

3 回答 3

6

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

大多数时候,您应该只将变量声明为类型Object- 毕竟,这就是您真正了解的所有内容。如果您确实知道更多(出于某种原因),请使用您知道的任何内容(例如某些接口)声明它们并适当地进行转换。

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

于 2012-09-14T15:30:09.680 回答
2

Do you need an object on the type lcSeqHolder? Try this:

Object var1 = lcSeqHolder.newInstance();

It will only work if the class defined by lcSeqHolder has a default constructor.

于 2012-09-14T15:31:26.210 回答
0

所有类都扩展了 Object。您可以将其设为类型。

于 2012-09-14T15:30:16.803 回答