Java:通过反射的第二类方法调用

问题描述:

我有一个关于Java中的反射的问题。Java:通过反射的第二类方法调用

如下问题: 根据配置我想打电话给通过反射的方法,但不是唯一的一类CLASS_A的,但也从一个类CLASS_BCLASS_A引用。

但我想总是只使用类CLASS_A来访问该属性。

下面一个例子我的意思:

public class Foo 
{ 
    private String _name; 
    private Bar _bar; 
    public Foo(String name, Bar bar) 
    { 
     _name = name; 
     _bar = bar; 
    } 

    public String getName() 
    { 
     return _name; 
    } 

    public Bar getBar() 
    { 
    return _name; 
    } 
} 

public class Bar 
{ 
    private String _name; 

    public Bar(String name) 
    { 
    _name = name; 
    } 

    public String getName() 
    { 
    return _name; 
    } 
} 

我要永远使用Foo类的实例来调用由getMethod返回的方法...不管是否Foo方法应该叫或者Bar的方法。

public class Executor 
{ 
    public static void main(String[] args) 
    { 
    Foo foo = new Foo("fooName", new Bar("barName")); 
    String attribute = "barName"; 

    Method method = getMethod(Foo.class, attribute); 

    try 
    { 
     System.out.println(String.valueOf(method.invoke(foo, new Object[]{}))); 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    } 

private static Method getMethod(Class<?> clazz, String attribute) 
{ 
    try 
    { 
     if (attribute.equals("fooName")) 
     {   
     return clazz.getDeclaredMethod("getName", new Class[] {}); 
     } 
     else if (attribute.equals("barName")) 
     { 
     //Is that somehow possible? 
     Method method = clazz.getDeclaredMethod("getBar.getName", new Class[] {}); 
     return method; 
     } 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 

    return null; 
    } 
} 

是这样的可能吗? 谢谢!

+0

我怀疑你可以通过反射来做到这一点。你在这里需要什么反思? –

+0

好吧,在实现时我认为使用反射会很聪明(这只是一个简单的例子)。 但是你是对的,在这种情况下,我不需要反思......我只是感兴趣,不管它是否可能。 – user2031986

+0

你可以检查BeanUtils as bhdrkn提到的。它可能会做类似的工作。 –

您可以使用Apache BeanUtils库。

Here是您如何使用它的一个很好的例子。

+0

感谢您的链接。这正是我需要的。我只是好奇,是否可以通过反射来调用“嵌套”方法。 – user2031986