リフレクションで、(1)の方のメソッドインスタンスを得たいとき、どういった方法が考えられますか?
//JDK 6.0
public Hoge {
void method1(String str, Object ...objs){}//(1)
void method1(String str, String str2){}//(2)
}
Hoge hoge = new Hoge();
Class c = hoge.getClass();
Method m12 = c.getMethod("method", String.class, String.class);
Method m11 = c.getMethod("method", ?? );
No.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 を調査すれば分かります。
No.1
- 回答日時:
シンタックスシュガーのため↓で取得できますよ。
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]});
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
privateなフィールドは継承され...
-
StringクラスのcompareToメソッド
-
GetterとSetterをやったのに。
-
コンストラクタの引数の中のnew?
-
NoSuchMethodErrorが解決できま...
-
プログラミングの問題です。大...
-
DESを使用した暗号化/復号化処...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
EXCEL VBA で、0から?1から?
-
JSPやサーブレットでSystem.out...
-
ActionForm form にnullが入っ...
-
Java配列でNullPointerExceptio...
-
オブジェクトの中のプロパティ...
-
パソコンキーボードで時分秒を...
-
大量のデータを読み込んで表示...
-
数字文字列をパック10進数に変...
-
javaで質問です。 文字列2023/2...
-
IF関数でEmpty値を設定する方法。
-
StrutsでJSPからListを受け取り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
Javaでlog4jを使ってログ出力を...
-
NoSuchMethodErrorが解決できま...
-
Socketの接続のタイムアウトを...
-
コンストラクタの引数の中のnew?
-
javaのプログラミングで作るRPG...
-
System.exit()の値を取得したい
-
JSP/Servletのパラメータの受け...
-
Processing :指定フォルダ内の...
-
javaで特定の文字列から特定の...
-
インタフェイス実装と抽象クラ...
-
Javaで日本語の出力が文字化けする
-
randomで
-
StringクラスのcompareToメソッド
-
【初心者です】javaで平均値を...
-
DESを使用した暗号化/復号化処...
-
初心者なので教えてほしいです。
-
ArrayList でスタックを
おすすめ情報