Javassist - CannotCompileException: объявление конструктора/метода не найдено

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

public class SomeClass {
    private String someString;
    private Object someValue;

    public SomeClass() {}

    public SomeClass(String someString, Object someValue) {
        this.someString = someString;
        this.someValue = someValue;
    }

    public void setSomeValue(Object someValue) {
        this.someValue = someValue;
    }

В Javassist я анализирую некоторые классы и их поля, а затем пытаюсь создать свой класс SomeClass. Но я получаю следующую ошибку для каждого поля, которое имеет другой тип, чем java.lang.Object.

javassist.CannotCompileException: [source error] setSomeValue(int) not found in com.test.SomeClass

и

javassist.CannotCompileException: [source error] setSomeValue(double) not found in com.test.SomeClass

и так далее. То же самое происходит, когда я пытаюсь использовать конструктор.

Почему это не работает?

Кстати, Javassist используется в связке с Android.


person Herbi    schedule 06.05.2015    source источник


Ответы (1)


Вам необходимо различать примитивные типы данных и классы: примитивный тип данных (byte, short, int, long, float, double, boolean, char) не может использоваться как класс (например, Object в вашем случае), чтобы иметь возможность используйте их как Objects, вам нужны классы-оболочки (Integer, Short, Long и т. д.).

Это основа Java, вы должны получить информацию о примитивных типах данных в Java онлайн: Документация Oracle Java может вам помочь.

Вы также можете спросить себя, зачем вообще нужны примитивные типы данных, когда существуют классы-оболочки. Вы можете найти ответы на этот вопрос в этом вопросе о переполнении стека.

person RAnders00    schedule 06.05.2015