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