2

次のようなジェネリッククラスがあります。

interface X<Input, Output>
{
  Output process(Input input);
}

class Y implements X<Integer, Float> 
{   
  Float process(Integer input); 
}

getDeclaredMethods を使用して、名前だけで Y のプロセスを検索します (意図的に引数ではありません)。戻り値の Method[] を見ると、Process が 2 回表示されます。Input=Object、Output=Object、そして実際のインスタンス化の型である Integer と Float です。

注意: Method[] に Object,Object を持つ関数が 1 つ、インスタンス化に使用する実際の型 (Integer、Float など) を持つ関数が 1 つあります。したがって、私が興味を持っている 2 番目の関数は、Method[] からアクセスできます。

実際の型を持つメソッドのみを取得する最良の方法は何ですか?

4

2 に答える 2

5

次に、実際のインスタンス化タイプを使用します。

それは可能ではありません。パラメーターの型が である単一のメソッドが表示されますObject。また、メソッドのジェネリック パラメーターと戻り値の型を調べると、それらが両方とも型変数 (InputOutput型変数) であることがわかります。

型パラメーターの特定の型引数を使用して継承するこのクラスのサブクラスには、2 つのメソッドがあります。より具体的なパラメーターと戻り値の型を持つメソッドと、元のクラスのメソッドのパラメーターと戻り値の型を持つブリッジ メソッドです。それをオーバーライドします。ブリッジ メソッドを無視する方法を尋ねている場合は、単純にそれがブリッジ メソッドかどうかを確認してください ( .isBridge())

于 2013-01-03T20:19:35.980 に答える
0

ジェネリック型は、コンパイル時にのみ認識されます。Objectは実行時のジェネリックの実際のタイプであるため、プログラムの実行中にジェネリックを取得することはできません。

于 2013-01-03T18:33:55.040 に答える