爪哇 - 反射,投射到一个未知的对象?(Java - Reflection, casting to

2019-10-17 13:53发布

基本上,我通过一个JFrame所有组件进行扫描,检查是否有方法的setTitle(字符串为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);
            }
        }           
    }

问题是,我不知道是什么类的。 有没有办法把它投给自己,或者我应该尝试做点别的?

Answer 1:

当你有一个Method ,你可以使用invoke()来调用它:

 for (Method m : c.getClass().getDeclaredMethods()){
     if( "setTitle".equals( m.getName() ) {
         m.invoke( c, "foo" ); // == c.setTitle("foo"); but without the casts
     }
 }


Answer 2:

您可以通过铸造通过反射调用的setTitle(),不



Answer 3:

for (Method m : c.getClass().getDeclaredMethods()){
    if (m.getName().equals("setTitle")) {
        m.invoke(c, "foo");
    }
}

删除所有其他不必要的代码。 您的字符串s是无用的(因为无论如何,这是没有意义的追加所有方法的名称和检查contains 。如果类有方法叫什么setTitle ?)



文章来源: Java - Reflection, casting to an unknown Object?