2016-02-12 42 views
2

我想用java反射做一些不同的事情。我编写的程序用于在从浏览器打开小程序时将全局侦听器添加到Java组件。一个事件触发,我得到事件源对象。在这里我不知道对象引用的实际类名称。如何调用未知对象的方法

if(object.getClass.getName().contains("oracle.ewt.laf.basic.BasicTabBarUI$Menu")) 
{ 
    // here we can invoke methods,fields,etc using reflection 
} 

我可以使用反射调用BasicTabBarUI $ Menu类的方法。

假设现在我有我在上面以下行,如果块

LWMenuItem menuItem = (LWMenuItem)object; 
menuItem.getLabel()); 

我不想指定LWMenuItem类的名称,而不是我想打电话给其方法getLabel()。如果我们知道班级名称,我们可以按照上述方式进行操作。但我们怎样才能做到反思。我们怎样才能在反射中投射?

回答

1

除了调用方法的结果之外,您不需要执行转换。只要使用对象的Class对象,其中有一个getMethod method将返回一个Method object你想要的方法,然后调用它:

Class cls = object.getClass(); 
Method getLabel = cls.getMethod("getLabel", null); 
String label = (String)getLabel.invoke(object, null); 
1

您可以继续从getLabel()使用返回值时的基本对象工作:

Method getLabelMethod = object.getClass().getMethod("getLabel"); 
Object menuItem = getLabelMethod.invoke(object); 
menuItem.getClass().getMethod("getName").invoke(menuItem); // or whatever...