从Method对象执行嵌套方法调用

时间:2015-06-23 03:01:43

标签: java reflection

我需要调用以下方法 -

testObj.getA().getB().getC().getD();

上面,testObj.getA()返回有一个方法getB()的对象A,该方法返回具有方法getC()的对象B,该方法返回对象C并且它具有方法getD()。

如何使用反射调用它?如果我按以下方式尝试Method对象 -

Method m = testObj.getClass().getMethod("getA().getB().getC().getD(), null));

以上未能说找不到该方法。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您没有一种名为getA().getB().getC().getD()的方法,因此您无法获得该方法。你有四种不同的方法。

没有什么可以阻止你通过反射来调用它们,但你必须将它视为四个单独的方法调用(因为它):

TypeOfA a = testObj.getClass().getMethod("getA").invoke(testObj);
TypeOfB b = TypeOfA.class.getMethod("getB").invoke(a);
TypeOfC c = TypeOfB.class.getMethod("getC").invoke(b);
TypeOfD d = TypeOfC.class.getMethod("getD").invoke(c);

答案 1 :(得分:2)

您可以使用Apache Commons BeanUtils

D d = (D)PropertyUtils.getNestedProperty(testObj, "a.b.c.d");

请参阅here