【问题标题】:Understanding method signature in NoSuchMethod exception了解 NoSuchMethod 异常中的方法签名
【发布时间】:2012-01-10 17:32:12
【问题描述】:

我遇到了这个异常,但解决了它。

java.lang.NoSuchMethodError: antlr.NoViableAltForCharException.<init>
(CLjava/lang/String;II)V

但我想知道如何解释这些消息:“(CLjava/lang/String;II)V” 另外,这个“init”是否提到了NoViableAltForCharException类的构造函数??

谢谢。

【问题讨论】:

    标签: java exception constructor init nosuchmethoderror


    【解决方案1】:

    您可能在服务器上有一个过时的 .jar 文件,而不是您正在编译代码的文件。 仔细检查服务器上的所有 .jar 文件是否与您正在编译的文件相同。

    【讨论】:

      【解决方案2】:

      类型签名 - 取自 this page

      JNI 使用 Java VM 的类型签名表示。表 3-2 显示了这些类型签名。

      Z                               boolean
      B                               byte
      C                               char
      S                               short
      I                               int
      J                               long
      F                               float
      D                               double
      L fully-qualified-class ;       fully-qualified-class
      [ type                          type[]
      ( arg-types ) ret-type          method type
      

      例如Java方法:

      long f (int n, String s, int[] arr);
      

      具有以下类型签名:

      (ILjava/lang/String;[I)J
      

      【讨论】:

        【解决方案3】:

        它正在寻找构造函数antlr.NoViableAltForCharException(char, String, int, int),但未能在类中找到它。

        &lt;init&gt; 方法是构造函数,&lt;cinit&gt; 方法是静态初始化块。参数类型由@gkamal 列出,另外V 是无效的。名义上,构造函数返回void,这就是签名末尾V的原因。

        顺便说一句:具有讽刺意味的是,J 是 long 而 L 是类,而 L 是 long 和 J 是 Java 类。 ;)

        【讨论】:

        • 我相信发帖者是在寻找如何解释它,而不是实际的解释。
        • 谢谢彼得,你的回答对方法签名和初始化方法都有帮助。
        【解决方案4】:

        请参阅types docs。这是一种方便的速记符号。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-15
          • 1970-01-01
          • 1970-01-01
          • 2018-04-19
          • 2012-09-20
          相关资源
          最近更新 更多