Почему аннотации java?
Я хочу спросить, почему аннотации java используются так много... Я знаю, что они заменили xml-конфигурацию, например, на jpa, но почему такая конфигурация используется вообще?
Рассмотрим этот фрагмент кода:
@Entity
class Ent{
// some fields
}
//... somewhere in the other file far far away
class NonEnt{
// whatever here
}
Теперь, когда я пытаюсь поместить это в постоянный контекст, с помощью метода
EntityManager
persist, я получаю ошибку времени выполнения (лучше было бы получить ошибку компиляции), пытаясь сохранить экземпляр
NonEnt
. Для меня есть очевидное решение, заставить сущности внедрить некоторый интерфейс no-method вместо использования @Annotations. Но это не популярно среди дизайнеров фреймворков, каков недостаток этого решения?
Спасибо, что ответили...
Ответы
Ответ 1
По сравнению с интерфейсами маркеров, аннотации имеют некоторые преимущества:
- они могут быть параметризированы
- они более мелкозернистые - вы можете присоединить их не только к классам, но и к другим элементам класса (поля, методы, аргументы метода и т.д.)
Аннотации также предположительно менее навязчивы, но этот момент является вопросом вкуса и спорным.
См. также:
Ответ 2
Использование аннотаций гораздо менее инвазивно, чем принудительное выполнение клиентом интерфейса или расширение класса.
Ответ 3
Для меня есть очевидное решение,
То, что вы описываете, называется "интерфейсом маркера", и это злоупотребление концепцией интерфейса. Я подозреваю, что единственная причина, по которой вы считаете это очевидной, - это из-за Serializable
- которая существует только потому, что в то время не было аннотаций.
заставить объекты реализовать некоторые no-method вместо использования @Annotations. Но это не популярно среди разработчиков структуры, что такое недостаток этого решения?
В чем его преимущества? У аннотаций есть огромное преимущество, что они могут иметь параметры, и они намного более мелкозернистые. Маркерные интерфейсы работают только на уровне класса.
Ответ 4
Сводка учебника java:
Аннотации содержат данные о программы, которая не является частью самой программы. У них нет прямых влияние на работу кода они комментируют.
Аннотации имеют ряд применений, среди них:
- Информация для компилятора. Аннотации могут использоваться компилятор для обнаружения ошибок или подавления предупреждения.
- Обработка времени компилятора и времени развертывания - Программные средства могут обрабатывать аннотацию генерировать код, файлы XML и т.д. д.
- Обработка времени выполнения. Некоторые аннотации доступны для проверяется во время выполнения.
Как вы можете видеть, аннотации - это способ указания метаданных о ваших типах в java, включая интерфейсы, они никоим образом не заменяют их.
Ответ 5
Аннотации Java действительно полезны, когда вы хотите добавить дополнительную информацию в свою переменную класса, метода или экземпляра. Существует много библиотек, которые используют эти аннотации. Эти аннотации сохраняют код простым и читаемым с возможностью внесения изменений в код во время выполнения.
Например, если вы использовали библиотеку lombok, которая создает компиляцию, getter и конструктор во время компиляции и сохраняет строки кода и время.
Когда компилятор выполняет код, lomok ищет все поля, помеченные аннотацией @Setter или @Getter, и добавляет setter и getter для этого поля в классе.
Еще один пример - тестировщик Junit. Как junit отличает обычный метод хелпера в тестовом классе и тест. Чтобы разграничить их, используется аннотация @Test.
В этом руководстве объясняется, как вы можете использовать аннотации java для создания собственного тестового бегуна.