Аннотации могут использоваться для инжекции кода?

Существует другая возможность: у Вас может быть ошибка в Вашем .aspx файле, который не позволяет Visual Studio повторно создавать разработчика.

, Если Вы переключаетесь на Режим конструктора, он покажет управление как неспособное быть представленным. Фиксация управления (в моем случае это была дополнительная кавычка в свойствах) и перекомпиляции должна повторно создать разработчика.

9
задан mirod 15 July 2009 в 23:21
поделиться

4 ответа

Изменение кода во время компиляции не поддерживается, но кажется возможным с помощью неподдерживаемые внутренние API-интерфейсы javac, здесь - это сообщение со ссылкой на решение hanbuy-panno со ссылкой на код ...

5
ответ дан 3 November 2019 в 01:03
поделиться

В прошлом году я искал нечто подобное . Не существует стандартного способа изменения классов с помощью процессоров аннотаций или компилятора, и документация по API аннотаций рекомендует создавать декораторы.

Если вы готовы жить с хаками, взгляните на Adrian Kuhn . использование частного API, где он добавляет литералы римских чисел в Java . Этот подход ограничен компилятором Sun javac, и вам нужно будет реализовать что-то еще, если вы используете другой (например, компилятор Eclipse).


Изменить: любой, кто интересуется этой областью, должен проверить Project Lombok .

3
ответ дан 3 November 2019 в 01:03
поделиться

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

Он определенно использует процессор аннотаций, просто он неявный. Команда javac будет искать в пути к классу процессоры аннотаций, если они не установлены явно.

Поскольку он использует эту команду для компиляции:

javac -cp ~ / development / panno / build / hanhuy-panno.jar * .java

Мы видим, что он изменил путь к классам, включив в него hanhuy-panno.jar , который будет содержать обработчик аннотаций.

Почему бы просто не написать этому парню по электронной почте и спросить, даст ли он вам код?

1
ответ дан 3 November 2019 в 01:03
поделиться

Вы можете это сделать, но не должны изменять класс, содержащий аннотации. (Уловка, на которую вы ссылаетесь, использует api дерева компиляции для изменения генерируемого байт-кода ...) Это не поддерживается и, вероятно, будет защищено в более поздних Java SDK.

Правильный способ сделать это - создать суперкласс , подкласс или класс-оболочка.

Я написал набор аннотаций, которые генерируют геттеры / сеттеры и другие забавные вещи. Я создаю суперкласс.

См. http://code.google.com/p/javadude/wiki/Annotations

Вы можете делать такие вещи, как

package sample;

import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;

@Bean(properties={
    @Property(name="name"),
    @Property(name="phone", bound=true),
    @Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
}) 
public class Person extends PersonGen {
}

, и он сгенерирует для вас PersonGen с поддержка полей / геттеров / сеттеров и связанных свойств.

2
ответ дан 3 November 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: