-1

編集済み

namoと呼ばれる文字列の変数だけが知っている未知のクラスがあり、 Graphics gパラメータを持つpaintahと呼ばれるメソッドがあります。今私はやろうとしています:

Class.forName(namo).getMethod("paintah", ??????????);    

疑問符を何に置き換えますか? 私は何時間もそれを理解しようとしています。

また、同じコードで同じクラスを使用する場合 (ただし、Classoという名前を知っているのは私だけです)、次のようにします。

new Classo.paintah(g);    

できます。

更新 OKなので、2つのクラスがあり、1つはコードのこの部分を持っています:

public static Classo cla = new Classo();
 public void paintComponent(Graphics g){
       Class.forName(namo).getMethod("paintah", Graphics.class); //not working
       cla.paintah(g); // working
}

それがメインクラスだとしましょう。未知のクラスと同じコードを持つClassoには、次のコード部分があります。

public void paintah(Graphics g){
       g.fillRect(20,20,200,200);
}

そうそう、それがより良いアイデアを与えることを願っています..

4

3 に答える 3

4

ターゲット メソッドのパラメーターの型を表すオブジェクトgetMethodの varargs 引数を取るメソッドを使用しています。Class

Graphicsオブジェクトのみを取る場合は、次を指定しGraphics.classます。

Class.forName("bla").getMethod("paintah", Graphics.class);

クラス名はわかっているので も必要ありません。クラス リテラルClass.forNameを使用してアクセスできます。

bla.class.getMethod("paintah", Graphics.class);

いずれにせよ、呼び出しExceptionsからスローされたものをキャッチする必要があります。getMethod

スロー:

NoSuchMethodException - 一致するメソッドが見つからない場合、または名前が "" または "" の場合。NullPointerException - name が null の場合 SecurityException - セキュリティマネージャ s が存在し、次の条件のいずれかが満たされる場合:

  • s.checkMemberAccess(this, Member.PUBLIC) の呼び出しは、メソッドへのアクセスを拒否します

  • 呼び出し元のクラス ローダーが現在のクラスのクラス ローダーと同じではないか、その祖先であり、s.checkPackageAccess() の呼び出しがこのクラスのパッケージへのアクセスを拒否している

于 2013-07-22T17:20:33.150 に答える