2012-02-24 101 views
3

有谁请让我知道我们什么时候应该使用:对象getClass()。getMethod的用途是什么?

Object.getClass().getMethod (action, null); 

我发现这个属于Java反射包。我在问这个问题,因为在我们现有的应用程序中,我们有这个代码,但是我找不到它的用途。

Method action = null; 
try { 
    action = getClass().getMethod (action, null); 
} 
catch (NoSuchMethodException x) { 
} 
return (TAPResponse) action.invoke (this, null); 

在这种情况下,这是干什么的?

为什么是这样return语句?什么会被退回?

+5

我怀疑这是现有应用程序中的代码,因为'getMethod'需要一个方法名称作为'String'而不是一个方法对象。 – stryba 2012-02-24 12:25:23

+0

是的,这是我的应用程序内的代码。 – Kiran 2012-02-24 12:41:43

+0

嗨,非常感谢你的回复,但是有没有人可以告诉我为什么返回类型是这样的? (因为invoke是java.lang.reflect.Method类的一部分,什么是TAPResponse在这里 – Kiran 2012-02-24 12:47:58

回答

-1

您的代码不正确,无法编译。

看的Javadoc类。它仅具有一个称为getMethod方法:)

getMethod(String name, Class<?>... parameterTypes) 

它不具有称为getMethod(方法,其有一个方法对象作为第一参数。

0

我希望你错过了代码出现的一部分,否则调用将是:

action = getClass().getMethod(null, null); 

这将让你一个NullPointerException。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getMethod(java.lang.String,java.lang.Class ...)

getMethod在给定的类中找到一个方法,第一个参数是方法名,其余参数是参数类型。

你的代码所做的是,它试图通过给定的名称,以获取类的方法(即不应该采取行动...真的,那么它是复制粘贴的问题?),并调用它放在你的类当前实例(this)。

此方法不接受任何参数,所以null作为既getMethod的第二个参数被传递并调用(它是多余的,可以被遗漏的)。

0

我怀疑这个代码编译。看看java.lang.Class#getMethod(...)

public Method getMethod(String name, 
        Class... parameterTypes) 
      throws NoSuchMethodException, 
        SecurityException 

它需要在类的公共方法和参数是上述方法需要的类型的名称。它返回Method对象,该对象可以通过传递此方法所属的对象的实例和它所需的参数来调用。

这是你的代码试图做什么。 (失败,似乎)

0

的其他意见谈了java.lang.Method的文档。就代码的含义而言:

在您指定的代码中,基本上是试图获取名为“actionName”的方法(我认为这是一个错误的btw,无论如何),然后调用该方法。如果你想避免做很多if-else,这很有用。

代替例如,:

如果( “第一”。equals(actionName))first();

else if(“second”.equals(actionName))second();

.....

您可以与您粘贴的代码替换它。这样你不必修改任何代码,只需添加一个新的方法,它将作为一个新的操作来支持。

只要您确保“actionName”已被清理(例如,您最终不会调用类似deleteAll),那么这是一种好方法。