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

当你有 aMethod时,你可以使用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");
    }
}

删除所有其他不必要的代码。您的 Strings是无用的(因为无论如何,附加所有方法名称并检查 是没有意义的contains。如果该类有调用方法setT怎么itle办?)

于 2013-01-14T14:01:10.023 回答