基本上,我扫描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);
}
}
}
问题是,我不知道它是什么类。有没有办法把它投射到自己,或者我应该尝试做别的事情?
答案 0 :(得分: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
}
}
答案 1 :(得分:2)
您可以通过反射调用setTitle(),而不是通过强制转换
答案 2 :(得分:2)
for (Method m : c.getClass().getDeclaredMethods()){
if (m.getName().equals("setTitle")) {
m.invoke(c, "foo");
}
}
删除所有其他不必要的代码。你的字符串s
没用(因为无论如何,附加所有方法名称并检查contains
是没有意义的。如果该类有setT
和itle
的方法怎么办? )