2009-10-02 3 views
12

내 클래스 패스 (iReport가 중요하다면)에 jar 파일이로드되어 있습니다. 연결 테스트를 시도 할 때 원하는 메소드가 있습니다. 따라서 jar 파일을 호출하면 java.lang.NoSuchMethodError가 발생합니다. 이이 문제와 관련 여부를하지만 여기서 시작 부분에있는 'L'은 어디에서 왔는가하면 잘 모르겠어요 클래스"L"이 Java 경로에 추가되는 이유는 무엇입니까?

Lorg/springframework/web/context/WebApplicationContext 

참조하고? 내가 수업을 참조하고 있었던 또 다른 때 거기의 'V'가 학급 후 있었다. 이 편지들은 어디서 오는 것이며 그 의미는 무엇입니까? 스택 추적의

시작 :

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

답변

24

이 문자는 내부적으로 메소드 서명을 인코딩하기 위해 자바에 의해 사용됩니다. 예를 들어 'L'은 전체 클래스 이름으로 지정되고 세미콜론 다음에 오는 다음 '객체'를 발표합니다. "V"앞에는 괄호가 있어야하고 "void"의 반환 유형이 설명되어야합니다.

귀하의 예를 보자

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

그것은라고 (L 발표) 객체를 [()로 표시] 인수를 취하지 않는 및 반환 getCurrentWebApplicationContext라는 클래스 org.springframework.web.context.ContextLoader에는 방법이 없다는 것을 말한다`조직 /을 springframework/web/context/WebApplicationContext (';'로 닫음).

편집 : 모든 코드 목록은 JNI specs의 표 3.2에 나와 있습니다.

EDIT2 : JVM 사양의 4.3 Descriptors 섹션에는 형식 및 코드에 대한 완전한 참조가 포함되어 있습니다.

+2

문자 코드에 대한 좋은 참고가 있습니까? 나는 본질적으로 같은 대답을 게시하려고했으나 근거없는 진술을하고 싶지 않았습니다. –

+0

아, 그건 좋은 참고입니다. –

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

관련 문제