【问题标题】:Netbeans 7.2.1, Java reflection, method.invoke(super, ..)Netbeans 7.2.1,Java 反射,method.invoke(super, ..)
【发布时间】:2013-10-16 16:40:58
【问题描述】:

为什么要调用

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)

【问题讨论】:

标签: java reflection netbeans super


【解决方案1】:

superreserved word in java

尝试更改变量名。

在此处查看如何使用 super 关键字。 http://docs.oracle.com/javase/tutorial/java/IandI/super.html

如果你想invoke a superclass method你必须使用super.methodName()

【讨论】:

  • method.invoke 逻辑错误,用法:method.invoke(this, "abc", "def");解决了我的问题。
【解决方案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,...);
}

编辑:

正如@MaVRoSCy 提到的super 是java 中的一个关键词

【讨论】:

    【解决方案3】:

    替换为您的班级名称。

    Method m = <classInstance>.getClass().getSuperClass().getDeclaredMethod("ABC");
    m.invoke(<classInstance>);
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多