Пример кода BCEL для помещения "нового класса []{String.class}" в стек
Я ищу пример кода BCEL о том, как создать массив размера 1, содержащий экземпляры java.lang.Class и инициализировать его единственный элемент со ссылкой на java.lang.String.class
другими словами, я ищу пример кода BCEL для помещения "нового класса []{String.class}" в стек.
Благодарю.
1 ответ
Решение
Предполагая, что вы хотите создать файл класса версии 49 (Java 5) или выше, необходимая последовательность команд:
iconst_1
anewarray
java/lang/Class
dup
iconst_0
ldc
java.lang.String.class
aastore
Теперь остается только вопрос, как создать это в BCEL. Согласно тому, что я видел на его веб-сайте, код генератора может выглядеть так:
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);
Хотя я не проверял это.