为什么"L"会添加到我的Java路径中?

Rob*_*bbR 16 java jar

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

Lorg/springframework/web/context/WebApplicationContext
Run Code Online (Sandbox Code Playgroud)

我不确定这是否与问题有关,但开头的'L'从何而来?另一次我引用了一堂课,课后有一个'V'.这些信件来自哪里,它们是什么意思?

堆栈跟踪的开始:

java.lang.NoSuchMethodError:  
org.springframework.web.context.ContextLoader
.getCurrentWebApplicationContext()Lorg/springframework/web/context/WebApplicationContext;
Run Code Online (Sandbox Code Playgroud)

jan*_*nko 26

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

举个例子:

java.lang.NoSuchMethodError:
org.springframework.web.context.ContextLoader .getCurrentWebApplicationContext()Lorg/springframework/web/context/WebApplicationContext;

它说,有在类中没有方法org.springframework.web.context.ContextLoader称为getCurrentWebApplicationContext不接受任何参数[记()]并返回一个对象(通过宣布L称为`组织/ springframework的/网络/上下文/ WebApplicationContext的(通过关闭";")).

编辑:所有代码的列表在JNI规范的表3.2中.

EDIT2:更具权威性:第4.3节JVM规范的描述符包含格式和代码的完整参考.

  • 信件代码有很好的参考吗?我打算发布基本相同的答案,但我不想做出未经证实的陈述. (2认同)

Ric*_*ler 9

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

有关详细信息,请参阅Java VM规范.

和一个字段类型的:

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 )
Run Code Online (Sandbox Code Playgroud)