Как вызвать метод Varargs в Bytebuddy таким образом, чтобы выпекать массив аргументов в качестве константы в байт -код?JAVA

Программисты JAVA общаются здесь
Anonymous
Как вызвать метод Varargs в Bytebuddy таким образом, чтобы выпекать массив аргументов в качестве константы в байт -код?

Сообщение Anonymous »

Я генерирую занятия с Bytebuddy. В одном месте мне нужно вызвать статический метод утилиты, который принимает Varargs строки типа. Мой код выглядит так: < /p>

Код: Выделить всё

String[] myStringArray = generateParameters()
MethodCall.invoke(utilsCall)
.with(myStringArray)
< /code>
Это, кажется, работает просто отлично. В то время как JVM, который сгенерировал код, работает, я могу создать экземпляр сгенерированного класса с помощью отражения и вызвать сгенерированный метод. Однако, если я позвоню в getBytes () 
в сгенерированном классе и запишу его в файл *.jar, указал, что файл будет выглядеть так (после декомпиляции):

Код: Выделить всё

public class MyGeneratedClass {

// $FF: synthetic field
public static String[] methodCall$p1kp7a1;

public void myGeneratedMethod(){
MyUtils.myStaticMethod(methodCall$p1kp7a1)
}

}
Следовательно, попытка загрузить этот файл *.jar и вызов mygeneratedmethod бросает nullpointerexception , потому что синтетическое поле, сгенерированное Bytebuddy, никогда не было инициализировано. Фактически, сгенерированный *.class -файл не показывает никаких следов содержимого MyStringArray Я перешел в метод во время начального шага генерации.
Что я делаю неправильно? Мне нужно быть в состоянии написать сгенерированные классы в файлы и загружать их позже, с аргументами «запекаются».

Подробнее здесь: https://stackoverflow.com/questions/796 ... ents-array

Вернуться в «JAVA»