Javassist — addMethod, возвращающий объект[][]

Моя цель — создать во время выполнения дополнительный метод внутри определенного файла .class.

Метод, возвращающий Object[][].

Для этого я нашел замечательный фреймворк под названием Javassist, фреймворк модификатора байт-кода, который помогает вам модифицировать скомпилированный класс во время выполнения, чтобы добавить больше байт-кода, представляющего новый метод.

Удалось создать метод void и метод, возвращающий строку, но по какой-то причине я не могу создать метод, возвращающий массив или матрицу.

До сих пор я изо всех сил пытался найти правильный способ создания такого метода и получил непрерывное исключение CannotCompileException.

Код:

private static CtMethod generateMethod1(CtClass declaringClass)
            throws CannotCompileException {

        StringBuffer sb = new StringBuffer();
        sb.append("public ").append(Object[][].class.getName()).append(" ").append("method1").append("(){")
        .append("return new").append(Object[][].class.getName()).append("{{ 1,2 }}").append("; }");

        System.out.println(sb.toString());
        return CtMethod.make(sb.toString(), declaringClass);
    }

ToString сгенерированного выше метода:

общедоступный [[Ljava.lang.Object; method1(){return [[Ljava.lang.Object;{{ 1,2 }}; }

Вероятно, сбой из-за ложного синтаксиса jni

Помощь будет оценена, заранее спасибо

~Мон


person USS-Montana    schedule 12.08.2017    source источник


Ответы (1)


Что ж, решил это, просто заменив Object[][].class.getName() на Object[][] буквально... надеюсь, это поможет другим в будущем.

person USS-Montana    schedule 12.08.2017