2013-02-01 54 views
1

我有一個關於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提到的。它可能會做類似的工作。 –

回答

0

您可以使用Apache BeanUtils庫。

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

+0

感謝您的鏈接。這正是我需要的。我只是好奇,是否可以通過反射來調用「嵌套」方法。 – user2031986