Pull to refresh

Comments 21

Интересно, хоть я и не junior.
Не хотите скооперироваться с Hexlet?
Я детально не разбирался, но Hexlet — это бесплатное образование?
Мне так показалось.
По большей части да, но у Рахима были планы и о платных курсах.
При всем моем уважении к авторам бесплатных курсов, я считаю, что преподавание (подбор материала, чтение лекций, написание статей, составление тестов, ...) должно оплачиваться.
Меценатство — это личный выбор. Сейчас для меня обучение — главный источник дохода.

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

public @interface Version { 
    public int version(); 
}


Тут следует отметить, что это не совсем обычные поля, а методы типа version() — не совсем обычные геттеры, и в определенных условиях могут очень больно бить по производительности.
В Андроиде наверное всё может бить по производительности. :) Нормального JIT-то нету.
Это конечно хорошо, но для тех, кто приступает к изучению языка было бы хорошо дать описание аннотациям, а не сразу с места в карьер :)
Я старался выстроить цепочку примеров.
Введение есть к любом учебнике, в том же Хорстмане — целая глава, кажется.
Ну хотя бы пару строк про общее понимание аннотаций, введения небольшого не хватает.
Вторая часть будет посвящено рассказу о том, для чего аннотации служат:
1. Влияем на поведение компилятора/JVM (@ Override, @SafeVarargs, ...).
2. Добавляем метаинформацию к классам. Можем считать ее при помощи Reflection API.
Я решил ограничиться разумным объемом, что бы пост было реально написать и вычитать за раз.
Вы выбрали хороший метод для преподнесения информации новичкам, показывая ошибки и ограничения на примере, да еще и с результатом компиляции. Такая подача материала хорошо запоминается и легко читается.
Будет еще здорово, если каждое утверждение будет подкрепляться ссылкой на документацию, ибо «хуниоров нужно приучить MAN-ить с детства».
Согласен.
Но тут методическая проблема:
1. Это делает написание статьи в 2 раза более длительным по времени. Многие вещи просто «размазаны» по java lang spec. И их поиск и собирание по абзацу — длительная процедура.
2. Спецификации, по моему опыту, склонны читать только около 10%-20% обучаемых.

Если делать серьезный ресурс, то это абсолютно правильное решение. Но непонятна монетизация такого ресурса. Пример: Эккель, Хорстман, Гослинг и прочие Шилдты и то в своих учебниках так не делают.
Возможен забавный трюк: аннотация — атрибут аннотации

И этот аттрибут может иметь значение по умолчанию. Сэкономлю вам полчаса поисков (спасибо автору блога Todd Fast), для аттрибута-аннотации дефолтное значение выставляется так:

@Target(ElementType.METHOD)
public @interface ReallyComplexAnnotation {
    public SimpleAnnotation value() default @SimpleAnnotation(a="..."); // right!
)


О!
Спасибо.

Еще есть интересный вопрос: аннотации не поддерживают рекурсивные структуры данных, т.е. сделать что-то типа односвязного списка или дерева «в лоб» не получится:
@Node {
    @Node next();
}

@TreeNode {
    @TreeNode left();
    @TreeNode right();
}


Вопрос — как красивее организовать такое?
Скажем генеалогическое древо на классе Person?
Не очень понятно, почему генеалогическое древо является мета-информацией класса персон. И как следствие возникает подозрение, что красивее — использовать не аннотации.
Не хватает примера, хотя бы минимального, с использование аннотаций (не как ими обозначить класс), а как их вытягивать из класса
В конце статьи же сказано, что в след. статье будет рассмотрено:
Чтение аннотаций с помощью Reflection API
Присоеденяюсь к критике: прочел статью, вроде понял технически, но не понял суть. Наверное все же стоит сначала описать проблему… и только потом давать кучу примеров решения.
Sign up to leave a comment.