2014-10-17 11 views
0

java.lang.Class의 인스턴스를 포함하는 크기 1의 배열을 만들고 그 인스턴스를 초기화하는 방법에 대한 BCEL 코드 예제를 찾고 있습니다. java.lang.String.class에 대한 참조가있는 유일한 요소BCEL 코드 예제에서 "new Class [] {String.class}"를 스택에 넣습니다.

다른 말로하면 "new Class [] {String.class}"를 스택에 넣으려는 BCEL 코드 샘플을 찾고 있습니다.

감사합니다.

답변

1

클래스 파일 버전 49 (자바 5) 이상을 만들려한다고 가정하면, 필요한 명령의 순서는 다음과 같습니다

iconst_1
anewarrayjava/lang/Class
dup
iconst_0
ldcjava.lang.String.class
aastore

이제 남은 유일한 질문은 BCEL에 그것을 생성하는 방법입니다. 내가 its website에서 본 것을에 따르면, 발전기 코드는 다음과 같이 보일 수 있습니다 :

il.append(InstructionConstants.ICONST_1); 
il.append(factory.createNewArray(Type.getType(Class.class), 1)); 
il.append(InstructionConstants.DUP); 
il.append(InstructionConstants.ICONST_0); 
il.append(new LDC(constantPoolGen.addClass(Type.getType(String.class)))); 
il.append(InstructionConstants.AASTORE); 

나는 그것을 테스트하지 않았습니다 있지만.

+0

감사합니다. ClassGenException : Illegal type : class org.apache.bcel.generic.ObjectType – entzik

+0

'factory.createConstant'는'Class' 상수를 생성 할 수 없습니다. 그러나 나는 급히 다른 실수를 저질렀다. 나는 그들을 지금 고쳤다. – Holger

+0

그게 내가 찾고 있었어, 고마워, 정말 고마워. – entzik