2

为什么试图调用

try {
    method.invoke(super, "abc", "def");
}
catch (Exception e) {
    // ignore for now
}

给我这样的错误:

'.' expected

在 Netbeans 7.2.1 中?清洁和构建后:

Compiling 2 source files to C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\build\web\WEB-INF\classes
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\src\java\pl\adrian\servlets\ServletPlus.java:45: error: '.' expected
                    method.invoke(super, "abc", "def");
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\src\java\pl\adrian\servlets\ServletPlus.java:45: error: ')' expected
                    method.invoke(super, "abc", "def");
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\src\java\pl\adrian\servlets\ServletPlus.java:45: error: ';' expected
                    method.invoke(super, "abc", "def");
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\src\java\pl\adrian\servlets\ServletPlus.java:45: error: not a statement
                    method.invoke(super, "abc", "def");
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\src\java\pl\adrian\servlets\ServletPlus.java:45: error: ';' expected
                    method.invoke(super, "abc", "def");
5 errors
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\nbproject\build-impl.xml:851: The following error occurred while executing this line:
C:\Documents and Settings\u\Moje dokumenty\NetBeansProjects\ServletPlus\nbproject\build-impl.xml:284: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 3 seconds)
4

4 回答 4

3

superjava 中的保留字

尝试更改变量名称。

请参阅此处如何使用super关键字。http://docs.oracle.com/javase/tutorial/java/IandI/super.html

如果要调用超类方法,则必须使用super.methodName()

于 2013-10-09T10:58:14.810 回答
2

我相信你做得不对:如何使用 java 反射调用方法的仅供参考:

java.lang.reflect.Method method;

try {
  method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) {
  // ...
} catch (NoSuchMethodException e) {
  // ...
}

try {
    method.invoke(obj, arg1, arg2,...);
}

编辑:

正如@MaVRoSCyhas 提到super的,这是java中的一个关键词

于 2013-10-09T10:58:01.040 回答
0

将 <classInstance> 替换为您的类的名称。

Method m = <classInstance>.getClass().getSuperClass().getDeclaredMethod("ABC");
m.invoke(<classInstance>);
于 2013-11-18T15:18:04.217 回答
0

问题在于我对多态性的理解不好,嗯,这有点可怜,因为我认为“super”是指超类的对象,而“this”是指当前的对象——类似的。

当然,只有一个对象是从扩展类中实例化出来的。所以我不得不用“this”替换“super”。

于 2013-11-23T10:14:09.413 回答