Я работаю с Явой 6 обработка аннотации, т.е. в чем может быть найден javax.annotation.processing
(не Ява 5 КВ.).
Интересно что концептуальное различие между различным Element
, Type
, и Mirror
классы. Поскольку я действительно не понимаю это, трудно эффективно программировать процессор аннотации. Есть различные методы, которые 'преобразовывают' между этими понятиями, но я не действительно уверен, что я делаю, используя их.
Так, например, позвольте мне иметь случай AnnotationMirror
.
Когда я звоню getAnnotationType()
Я получаю случай DeclaredType
(который осуществляет TypeMirror
по любой причине).
Тогда я могу звонить asElement()
на этом и получают случай Element
.
Что произошло?
Я использую Алису, чтобы научить детей в возрасте 11-14 лет. Это хорошо для них хорошо работает, но я бы не использовал его для детей намного моложе, если это не было одной на одной ситуации. Я не могу говорить на царапину.
Одна вещь, на которую я могу говорить, - это программирование Mindstorm Lego Mindstorm. Есть затраты, в отличие от Алиса и царапины, но она очень доступна на 1-й по 4-м классе. Посмотрите, есть ли первая Lego League Group рядом с вами, чтобы вы могли присоединиться к другим, чтобы помочь с расходами.
-121--3397854- Объект типа javax.lang.model.element.ange.notationmirror
представляет аннотацию в вашем коде.
Объявленный тип представляет класс аннотации.
Его элемент является универсальным классом (см. http://java.sun.com/javase/6/docs/api/javax/lang/model/element/typeelement.html для получения дополнительной информации о этот вопрос). Элемент может быть универсальной версией класса, как список
, где в качестве заявленного типа является параметризованная версия, например список
. Однако я не уверен, что можно иметь аннотации классов использовать дженерики, и поэтому различие может быть неактуальным в этом контексте.
Например, позволяет сказать, что у вас есть следующий метод Junit4:
@Test(expected = MyException.class)
public void myTest() {
// do some tests on some class...
}
AnnotationMirROR представляет @test (ожидается = nullpointerexception.class)
. Объявленный тип - это класс org.junit.test
. Элемент более или менее то же самое, что не участвуют нищих.
Эта статья может помочь понять дизайн обработки аннотации Java 6:
Gilad Bracha и Дэвид Унгар. Зеркала: Принципы дизайна для мета-уровня Услуги объектно-ориентированных Языки программирования. в proc. из ACM Conf. на объектно-ориентированном Программирование, системы, языки и Заявки, октябрь 2004 года.
Существует действительно на совпадение этих концепций.
Элемент
моделирует статическую структуру программы, то есть пакеты, классы, методы и переменные. Просто подумайте обо всем, что вы видите в посылке Eclipse.
Тип
моделирует ограничения статически определенного типа программы, то есть типы, генерические параметры типа, подстановочные знаки типа общих типов. Просто подумайте обо всем, что является частью деклараций типа Java.
Зеркало
- это альтернативная концепция для отражения Гиладом Брамской и Дейвом Унгаром, первоначально разработанным для себя, на основе Selftalk на основе прототипа. Основная идея состоит в том, чтобы отделить запросы о структуре кода (а также манипулированием времени выполнения структуры, ALAS не доступно в Java) от объектов домена. Итак, чтобы запрашивать объект о его методах, вместо звонка #getClass
# GetClass Вы бы спросили систему зеркала, через которую вы можете увидеть отражение объекта. Благодаря этому разделению вы также можете отразить на классах, которые не загружаются (как и в случае обработки аннотации) или даже классов в удаленном изображении. Например V8 (JavaScript двигатель Google) использует зеркала для отладки кода JavaScript, который работает в другом пространстве объекта.