2015-06-23 69 views
0

我需要对以下方法的调用 -执行嵌套方法从方法对象调用

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

以上,testObj.getA()返回对象A,其有一个方法getB(),它返回对象B即有方法getC(),它返回对象C并且它有方法getD()。

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

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

上面的失败说的方法是找不到的。有什么建议么?

+0

获取'getA'的''方法'。调用它。获取返回值并使用反射从它获取'getB''方法'。调用它。取其返回值并使用反射到它的'getC''方法',并且令人厌恶。 –

+1

我的建议是:不要这样做。 –

+0

感谢您的回复。你将如何处理这种情况,你必须遍历多个方法才能获得所需的值,但需要在运行时执行它? – JUG

回答

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); 
+0

谢谢。这个电话应该是从另一个地方传过来的。几乎就像一个上下文以及在上下文中查找数据的位置,所以我希望有一种直接的方法可以将它称为传入参数。我当然可以打破它并按照上面的方式打电话。 – JUG

+1

这听起来像是你真正的问题,这是“我如何评估任意表达式。” @JUG。我个人喜欢OGNL这样的目的。 – Daniel