2009-10-02 3 views
12

Tôi có một cái lọ được nạp trong classpath của tôi (trong iReport nếu nó quan trọng) mà tôi chắc chắn có phương pháp mong muốn nhưng khi tôi thử kiểm tra kết nối, do đó gọi jar, tôi nhận được một java.lang.NoSuchMethodError, nói rằng đang tham chiếu lớp họcTại sao chữ "L" lại được thêm vào đường dẫn Java của tôi?

Lorg/springframework/web/context/WebApplicationContext 

Tôi không chắc liệu điều này có liên quan đến vấn đề hay không nhưng từ 'L' ban đầu đến từ đâu? Một lần khác tôi tham khảo một lớp học có chữ 'V' sau lớp học. Các chữ cái này đến từ đâu và chúng có ý nghĩa gì?

Bắt đầu của stack trace:

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

Trả lời

24

Những chữ được sử dụng bởi Java để mã hóa chữ ký phương pháp nội bộ. Ví dụ: "L" thông báo "Object" sau, được chỉ định bởi tên đầy đủ của nó và theo sau là dấu chấm phẩy. Chữ "V" phải được đặt trước bằng dấu ngoặc đơn và mô tả kiểu trả về "void".

Hãy ví dụ của bạn:

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

Nó nói, rằng không có phương pháp trong lớp org.springframework.web.context.ContextLoader gọi getCurrentWebApplicationContext chấp nhận không có đối số [ký hiệu bằng ()] và trả về một đối tượng (bằng cách L công bố) được gọi là 'org/springframework/web/context/WebApplicationContext (đóng bởi ';').

EDIT: Danh sách tất cả các mã nằm trong Bảng 3.2 của JNI specs.

EDIT2: Thậm chí nhiều hơn authoritive: Phần 4.3 Descriptors của đặc tả JVM chứa một tài liệu tham khảo đầy đủ về định dạng và mã.

+2

Có một tài liệu tham khảo tốt cho các mã thư? Tôi đã đăng bài về cơ bản cùng một câu trả lời, nhưng tôi không muốn đưa ra các câu lệnh không được chứng thực. –

+0

Ah, đó là một tài liệu tham khảo tốt. –

8

Ký tự L được sử dụng để biểu thị một tên lớp trong đặc tả lớp bên trong của Java.

Xem chi tiết Java VM spec để biết chi tiết.

Và một table các loại lĩnh vực:

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

Tôi cũng thấy rằng: P - dự án F - thư mục – Seagull