- ベストアンサー
リフレクションで可変長引数メソッドを取得する方法
- リフレクションを使用して、可変長引数メソッドのインスタンスを取得する方法について教えてください。
- JDK 6.0の場合、リフレクションを使用してメソッドインスタンスを取得する方法はありますか?
- Hogeクラスのメソッド名がmethodで、引数の型がStringまたはString型の可変長引数のものを取得するためのリフレクションのメソッドを教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No1.です、連投ですみません。 回答書いてる途中で、HogeクラスですでにObject配列がオーバーロードしている環境でObjectの可変長引数を定義したら、どうなるのか気になったので手元の環境で確認してみました。結論としては「先方の定義は有効で後方の定義部分で文法エラーが発生する。」みたいです。 ↓が確認したソース import java.lang.reflect.Method; public class Hoge { public Hoge() { } public void method1(String str, Object[] obj){ System.out.println("CC"); } //↓の部分ですでに定義されているという文法エラー public void method1(String str, Object ...objs){ System.out.println("AA"); } public void method1(String str, String str2){ System.out.println("BB"); } public static void main(String[] args) throws Exception{ Hoge hoge = new Hoge(); Class c = hoge.getClass(); Method m12 = c.getMethod("method1", String.class, String.class); Method m11 = c.getMethod("method1", String.class,Object[].class ); m11.invoke(hoge,new Object[]{"",new Object[0]}); } } 環境 NetBeans 5.0 で確認 あと最後にリフレクションでメソッドの呼び出し引数の型の定義方法が分からない場合はClass#getDeclaredMethodsで全てのメソッドを取得しての該当のメソッドの parameterTyps を調査すれば分かります。
その他の回答 (1)
- nfonfonfo
- ベストアンサー率63% (12/19)
シンタックスシュガーのため↓で取得できますよ。 c.getMethod("method1", String.class,Object[].class); 下は質問文を変更したソースです。 public class Hoge { public Hoge() { } public void method1(String str, Object ...objs){ System.out.println("AA"); } public void method1(String str, String str2){ System.out.println("BB"); } public static void main(String[] args) throws Exception{ Hoge hoge = new Hoge(); Class c = hoge.getClass(); Method m12 = c.getMethod("method1", String.class, String.class); //アクセス修飾子がpublic以外の場合はgetDeclaredMethodで取得可能 Method m11 = c.getMethod("method1", String.class,Object[].class ); m11.invoke(hoge,new Object[]{"",new Object[0]}); } }