У меня есть программа, которая генерирует классы с использованием JCodemodel и динамического загрузчика классов. Я разбираю файл yaml, генерирую необходимые классы и сопоставляю структуру файла. Пока все в порядке.Системный загрузчик классов не использует метод переопределения
Snakeyaml обрабатывает синтаксический разбор и пишет красиво, поэтому определение классов, если оно прекрасное.
Затем я пытаюсь получить доступ к методу свойства(), который переопределяется в ямле.
Сначала загрузите файл в «Дерево», загрузите его корневой элемент как «Вычислить» и распечатайте его класс и методы; то я вызываю переопределенный метод. computeb класс динамически сгенерирован, а также computeb $ Свойства.
вот код (я заменил мои пакеты от более коротких):
Tree tree = Parser.load(new FileInputStream("src/test/resources/tree.yaml"));
mypackage.Compute c = (mypackage.Compute) tree.root();
System.err.println("class : " + c.getClass());
for (Method m : c.getClass().getMethods()) {
System.err.println(" method : " + m);
}
System.err.println("properties() class is " + c.properties().getClass().getName());
В результате получается:
класс: класс computeb
метод: общественный computeb $ computeb.properties собственности()
метод: public mypackage.Compute $ Property mypackage.Compute.properties()
(...)
Недвижимость () class is mypackage.Compute $ Property
Как вы заметили, класс имеет два метода, но метод properties() называется вторым. Я хотел бы назвать первый (который определен в загрузчике классов). Почему так происходит? Что мне делать ?
Похоже, 'c.properties()' возвращает объект 'mypackage.Compute $ Property'. Вы пытались вызвать 'c.properties(). Properties()'? –
Вычисление $ Свойство свойства не имеет свойства(). – guigolum