代码之家  ›  专栏  ›  技术社区  ›  RobbR

为什么要将“L”添加到我的Java路径中?

  •  12
  • RobbR  · 技术社区  · 16 年前

    我在我的类路径中加载了一个jar(在iReport中,如果有必要的话),我确信它已经有了所需的方法。当我尝试测试连接时,因此调用jar,我得到一个java.lang.NoSuchMethodError,说它正在引用该类

    Lorg/springframework/web/context/WebApplicationContext
    

    我不确定这是否与问题有关,但一开始的“L”来自哪里?还有一次,我在引用一个类,该类后面有一个“V”。这些字母来自哪里?它们是什么意思?

    堆栈跟踪的开始:

    java.lang.NoSuchMethodError:  
    org.springframework.web.context.ContextLoader
    .getCurrentWebApplicationContext()Lorg/springframework/web/context/WebApplicationContext;
    
    2 回复  |  直到 16 年前
        1
  •  28
  •   janko    16 年前

    Java使用这些字母在内部对方法签名进行编码。例如,一个“L”宣布一个下面的“对象”,该对象由其完整的类名指定,后跟分号。“V”前面应该有括号,并描述返回类型“void”。

    以你为例:

    java.lang.NoSuchMethodError:

    它说,课堂上没有方法 org.springframework.web.context.ContextLoader 打电话 getCurrentWebApplicationContext () ]并返回一个对象(由 L )名为“org/springframework/web/context/WebApplicationContext”(以“;”结尾)。

    编辑: JNI specs .

    更具权威性的部分 4.3 Descriptors JVM规范的一部分包含了格式和代码的完整参考。

        2
  •  10
  •   Rich Seller    16 年前

    这个 L 字符用于表示Java内部类规范中的类名。

    Java VM spec 详情请参阅。

    table 在字段类型中:

    BaseType
    B     byte (signed byte)
    C     char (Unicode character)
    D     double (double-precision floating-point value)
    F     float (single-precision floating-point value)
    I     int (integer)
    J     long (long integer)
    L<classname>;     reference (an instance of class <classname>)
    S     short (signed short)
    Z     boolean (true or false)
    [     reference (one array dimension )