169 похожих чатов

Аннотации хороши в статически типизированном языке только как мета информация

для дополнительных проверок компилятором/статическими анализаторами кода (@Override, @Deprecated, @FunctionalInterface и иже с ними).
Для описания мапингов и прочих архитектурных связок их использовать плохо, так как это не прозрачно и не типо безопасно (большинство таких аннотаций обрабатывается в рантайм рефлексией, которая непрозрачна и не типобезопасна).
Тем более это верно для Kotlin, где архитектура приложения может описываться на том же языке, что и алгоритмы, благодаря наличию дженериков, функций высших порядков и прочих высокоуровневых абстракций.
Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?

6 ответов

16 просмотров

Дичайше плюсую (и разрабатываю очередной способ выражать это всё языком).

+1. Молитесь, чтобы в обработке хиберовского @OneToMany никогда не закрадывалось багов. Закрадётся - взвоешь разбираться, почему оно упало

Это верно, проблема только в том, что сейчас не такой уж большой выбор фреймворков типа экспозед

Но хочется придумать таки (нормальный!) способ к полям добавлять метаданные.

>Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком? Думаю, вопрос в определённом сорте удобства: людям нравится иметь это под рукой прямо в том же месте, где сами сущности, к которым это относится, объявляются - условно, видеть @Transactional в спринге в тех компонентах, где применяется соответствующая аннотации логика, а не в AbstractPersistenceTransactionConfigFactoryBean (утрирую!) где-то очень далеко. Трейд-офф типобезопасности/компайл-тайм корректности приложения с простотой поддержания контекста при разработке и собственно разработки.

не соглашусь

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта