1

基本的に、JFrame内のすべてのコンポーネントをスキャンし、メソッドsetTitle(String arg0)があるかどうかを確認し、ある場合は、タイトルを「foo」に設定します。ただし、タイトルを設定するには、適切なオブジェクトにキャストする必要があります。

    public void updateTitle(Container root){

        for (Component c : root.getComponents()){

            String s = "";
            for (Method m : c.getClass().getDeclaredMethods()){

                s += m.getName();
            }

            if (s.contains("setTitle")){                

                c.setTitle("foo"); //Here is where I need the casting 
            }

            if (c instanceof Container){

                updateTitle((Container) c);
            }
        }           
    }

問題は、それがどのクラスかわからないことです。それ自体にキャストする方法はありますか、それとも他のことを試してみる必要がありますか?

4

3 に答える 3

4

あなたが持っているとき、あなたはそれを呼び出すためにMethod使うことができます:invoke()

 for (Method m : c.getClass().getDeclaredMethods()){
     if( "setTitle".equals( m.getName() ) {
         m.invoke( c, "foo" ); // == c.setTitle("foo"); but without the casts
     }
 }
于 2013-01-14T13:58:59.510 に答える
2

キャストではなく、リフレクションを介してsetTitle()を呼び出すことができます

于 2013-01-14T13:56:06.267 に答える
2
for (Method m : c.getClass().getDeclaredMethods()){
    if (m.getName().equals("setTitle")) {
        m.invoke(c, "foo");
    }
}

他のすべての不要なコードを削除します。文字列sは役に立ちません(とにかく、すべてのメソッド名を追加してチェックするのは意味がありませんcontains。クラスにメソッドが呼び出された場合はどうsetTなりitleますか?)

于 2013-01-14T14:01:10.023 に答える