2009-10-02 61 views
12

我有一个罐子在我的类路径加载(在iReport的,如果它事项),我敢肯定有希望的方法,但当我试图测试连接,从而调用罐子,我得到一个java.lang.NoSuchMethodError,说它正在引用该类为什么将“L”添加到我的Java路径中?

Lorg/springframework/web/context/WebApplicationContext 

我不确定这是否与问题有关,但是开头的'L'来自哪里?另一次我参考一个课时,课后有一个'V'。这些信件来自哪里,它们是什么意思?

开始的堆栈跟踪:

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

回答

24

这些字母都使用Java来在内部编码方法签名。例如,一个“L”宣布一个后面的“对象”,由它的全部类名指定,后面跟着一个分号。 “V”应该先括号括起来,并描述返回类型“void”。

把你的例子:

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

它说,有名为getCurrentWebApplicationContextorg.springframework.web.context.ContextLoader类没有方法不接受任何参数[由()表示],并返回调用的对象(由L公布)`组织/ springframework/web/context/WebApplicationContext(由';'结尾)。

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

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

+2

是否有字母代码一个很好的参考?我打算发表基本相同的答案,但我不想做不成立的陈述。 – 2009-10-02 14:53:15

+0

啊,这是一个很好的参考。 – 2009-10-02 15:38:51

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) 
+0

我还发现: P - 项目 F - 文件夹 – Seagull 2017-11-14 14:39:43

相关问题