typedef
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 02.01.18 23:35
Оценка:
Как человеку, воспитанному на С++, мне зело не хватает в Java плюсового typedef.

Есть ли какие-нибудь нормальные способы получить схожую функциональность в Java? Я хочу получить семантическую целостность своих типов данных. У меня в проекте множество данных передается как String или int. Но по сути там передаются совершенно разные типы данных. Например, у объектов есть Id, InstanceId, ResourceId и пр., передаваемые как String и иногда по ошибке девелоперы могут взять Id и передать его туда, где ожидается ResourceId. Синтаксически проблем нет — и там и там строки, но логически это ошибка. И отследить эту ошибку порой сложно. Я хотел бы получить какой-нибудь ворнинг от компилятора в таких местах.

В С++ я сделал бы это через typedef, но в Java такой фичи нет. Те алиасы для типов, которые можно объявить через using, это совершенно не то, оно работает только в рамках одного файла. Другое решение, приходящее на ум — унаследоваться бы от стандартных типов, что-нибудь вроде этого:

public class InstanceIdType extends String


Но так сделать нельзя, ибо класс String объявлен как "final", закрыт для наследования.

Пока на ум приходит создание классов-оберток, имеющих внутреннее поле типа String или int, но это ж приведет к созданию кучи дополнительных мелких объектов в рантайме. Не хочется жертвовать производительностью и памятью.

Может есть какие-то другие способы? Какие-нибудь волшебные аннотации, подсказывающие, когда String можно передавать в метод, ожидающий String, а когда нельзя? Среда разработки — Intellij IDEA, но в идеале нужно бы универсальное решение, чтоб везде работало, т.к. некоторые разработчики используют Eclipse.
С уважением, Artem Korneev.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.