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

时间:2009-10-02 14:41:39

标签: java jar

我在我的类路径中加载了一个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 个答案:

答案 0 :(得分:24)

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

举个例子:

  

java.lang.NoSuchMethodError:
  org.springframework.web.context.ContextLoader   .getCurrentWebApplicationContext()Lorg / springframework的/网络/上下文/ WebApplicationContext的;

它说,类org.springframework.web.context.ContextLoader中没有一个名为getCurrentWebApplicationContext的方法不接受任何参数[由()表示]并返回一个对象(由L公布)名为`org / springframework / web / context / WebApplicationContext(由';'关闭)。

编辑:所有代码的列表在JNI specs的表3.2中。

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

答案 1 :(得分:8)

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 )