0

メソッドの Param 型を含む配列のすべての要素を取得したい ( Java.reflectで動的に取得)、

メソッドに2つのパラメーターがある場合のコードは次のとおりです。

Method testMethod = c.getMethod(method.getName(), new Class[] {int.class, String.class});

しかし、それは動的でなければならないのでmethod.getTypeParameters()、すべてのパラメーター型で配列を返す : を使用します。

それから私が書くとき:

Method testMethod = c.getMethod(method.getName(), new Class[] {method.getParameterTypes});

しかし、それは私にそれを与えます:タイプの不一致:クラス[]からクラスに変換できません

私が持っているので、私はパラメータをループしなければならないことを理解しました:

method.getParameterTypes[0] // gives  "int"

method.getParameterTypes[1] // gives  "String"

どうすればこれを達成できますか?多分ループ?これについて何か考えはありますか?ありがとうございました。

4

2 に答える 2

0
Method testMethod = c.getMethod(
    method.getName(), new Class[] {method.getParameterTypes});

する必要があります

Method testMethod = c.getMethod(
    method.getName(), method.getParameterTypes());

最初の問題は()、 の最後にがないことですgetParameterTypes。Java では、メソッドを呼び出すときに明示的な括弧が必要です。

getParameterTypes2 番目の問題は、 a の結果をa のClass<?>[]中に入れようとしていることですClass[]。に含めることができるのは配列ではなく個々のクラスだけなClass[]ので、 によって返される配列を使用してgetParameterTypes()ください。


なぜあなたがこれをしているのかはまったくわかりません。インスタンスの具象クラスでメソッドを検索しなくても、インターフェイスからを取得してMethod、そのインターフェイスのインスタンスに適用できます。抽象クラスについても同様です。継承グラフに穴が開いていたり、対応する何らかの奇妙な静的メソッド規則がない限り、別のメソッドを取得するために 1 つのメソッド シグネチャを使用する必要はありません。どちらもおそらくリファクタリングの機会です。

コードベースへの反映が少なければ少ないほど、人々が学習しやすくなり、バグ ファインダーやその他の分析ツールから得られるマイレージが増え、不完全なクラスパスの問題が少なくなります。

于 2013-04-25T18:44:18.440 に答える
0

種類を確認Arrays.toString(method.getParameterTypeas())したい場合にご利用ください。それらを反復して使用する場合は、ループを使用します。

for (Class<?> type : method.getParameterTypeas()) {
    // use the type
}
于 2013-04-25T18:45:01.853 に答える