
リフレクションで、(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ランキング
-
プログラミングの問題です。大...
-
Java プログラム public class ...
-
Javaで日本語の出力が文字化けする
-
Javaの問題について
-
Java swing
-
JavaFXでの表内のチェックボッ...
-
Javaでわからない問題がありま...
-
ComboBoxのItem追加
-
【Swing】JPanel クラス外から...
-
String型の変数のChar型の配列...
-
C# ListBoxのアイテムをユーザ...
-
javaの質問です ボタンを右、...
-
StringBuilderをStringに代入
-
JSPやサーブレットでSystem.out...
-
エクセルVBAで「〜」が表現でき...
-
Javaは全く扱ったことがないの...
-
PerlプログラムをJavaに変換す...
-
2進数は計算には使えない? 16...
-
サーブレットで複数値の受取り
-
Javaを使ってデジタル時計を作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
コンストラクタの引数の中のnew?
-
Javaでlog4jを使ってログ出力を...
-
System.exit()の値を取得したい
-
javaのプログラミングで作るRPG...
-
GetterとSetterをやったのに。
-
java 継承の問題で分からないと...
-
Socketの接続のタイムアウトを...
-
NoSuchMethodErrorが解決できま...
-
初心者なので教えてほしいです。
-
Java プログラム public class ...
-
javaで特定の文字列から特定の...
-
【java】同ディレクトリ別ファ...
-
JSP/Servletのパラメータの受け...
-
インタフェイス実装と抽象クラ...
-
randomで
-
【正規表現】< と > に囲まれた...
-
DESを使用した暗号化/復号化処...
おすすめ情報