对象getClass()。getMethod有什么用?

时间:2012-02-24 12:22:13

标签: java reflection

有人可以告诉我们什么时候应该使用:

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

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

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

在这种情况下这是做什么的?

为什么返回声明会这样?什么将被退回?

4 个答案:

答案 0 :(得分: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在给定的类中找到一个Method,第一个参数是Method name,其余的参数是参数类型。

你的代码是做什么的,它试图通过给定的名称获取你的类的方法(这不应该是动作......真的,这是一个复制粘贴问题吗?),并在你的类当前调用它实例(这)。

此方法不接受任何参数,因此将null作为getMethod和invoke的第二个参数传递(它是多余的,可以省略)。

答案 1 :(得分:0)

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

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

它取该类中的公共方法的名称,以及该方法所采用的参数类型。它返回Method对象,该对象可以通过传递此方法所属的Object实例及其所需的参数来调用。

这是您的代码尝试执行的操作。 (似乎没有成功)

答案 2 :(得分:0)

其他评论讨论了java.lang.Method的文档。就代码的含义而言:

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

例如,而不是:

  

if(“first”.equals(actionName))first();

     

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

     

.....

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

只要您确保清除“actionName”(例如,您最终没有调用 deleteAll 之类的东西),这是一个很好的方法。

答案 3 :(得分:-1)

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

查看Javadoc for Class。它只有一个名为getMethod的方法:

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

它没有名为getMethod()的方法,它有一个Method对象作为第一个参数。