有人可以告诉我们什么时候应该使用:
Object.getClass().getMethod (action, null);
我发现这属于Java反射包。我问这个问题是因为,在我们现有的应用程序中,我们有这个代码,但是我找不到它的用途。
Method action = null;
try {
action = getClass().getMethod (action, null);
}
catch (NoSuchMethodException x) {
}
return (TAPResponse) action.invoke (this, null);
在这种情况下这是做什么的?
为什么返回声明会这样?什么将被退回?
答案 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对象作为第一个参数。