Что является концепцией позади: Напечатайте - Элемент - Зеркало

Я работаю с Явой 6 обработка аннотации, т.е. в чем может быть найден javax.annotation.processing (не Ява 5 КВ.).

Интересно что концептуальное различие между различным Element, Type, и Mirror классы. Поскольку я действительно не понимаю это, трудно эффективно программировать процессор аннотации. Есть различные методы, которые 'преобразовывают' между этими понятиями, но я не действительно уверен, что я делаю, используя их.

Так, например, позвольте мне иметь случай AnnotationMirror.
Когда я звоню getAnnotationType() Я получаю случай DeclaredType (который осуществляет TypeMirror по любой причине).
Тогда я могу звонить asElement() на этом и получают случай Element.
Что произошло?

18
задан Wolfgang 23 January 2010 в 12:27
поделиться

3 ответа

Я использую Алису, чтобы научить детей в возрасте 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 . Элемент более или менее то же самое, что не участвуют нищих.

5
ответ дан 30 November 2019 в 07:55
поделиться

Эта статья может помочь понять дизайн обработки аннотации Java 6:

Gilad Bracha и Дэвид Унгар. Зеркала: Принципы дизайна для мета-уровня Услуги объектно-ориентированных Языки программирования. в proc. из ACM Conf. на объектно-ориентированном Программирование, системы, языки и Заявки, октябрь 2004 года.

6
ответ дан 30 November 2019 в 07:55
поделиться

Существует действительно на совпадение этих концепций.

  • Элемент моделирует статическую структуру программы, то есть пакеты, классы, методы и переменные. Просто подумайте обо всем, что вы видите в посылке Eclipse.

  • Тип моделирует ограничения статически определенного типа программы, то есть типы, генерические параметры типа, подстановочные знаки типа общих типов. Просто подумайте обо всем, что является частью деклараций типа Java.

  • Зеркало - это альтернативная концепция для отражения Гиладом Брамской и Дейвом Унгаром, первоначально разработанным для себя, на основе Selftalk на основе прототипа. Основная идея состоит в том, чтобы отделить запросы о структуре кода (а также манипулированием времени выполнения структуры, ALAS не доступно в Java) от объектов домена. Итак, чтобы запрашивать объект о его методах, вместо звонка #getClass # GetClass Вы бы спросили систему зеркала, через которую вы можете увидеть отражение объекта. Благодаря этому разделению вы также можете отразить на классах, которые не загружаются (как и в случае обработки аннотации) или даже классов в удаленном изображении. Например V8 (JavaScript двигатель Google) использует зеркала для отладки кода JavaScript, который работает в другом пространстве объекта.

20
ответ дан 30 November 2019 в 07:55
поделиться
Другие вопросы по тегам:

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