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 に答える