Здравствуйте, sergii.p, Вы писали:
SP>·>Это "вариант 1" у топик-стартера в первом сообщении и его мнение "плодить класс на каждый параметр это чересчур".
.
SP>у ТС класс занимал 10 строчек. Тут 3. Мне показалось что это основной критерий почему нельзя "плодить класс на каждый параметр".
Потому что ты смухлевал, удалив переводы строк и static метод для конструирования. А по сути ровно то же.
Ты предложил так
class XType extends NewType<Integer> {
XType(int val) { super(val); }
}
Можно было так:
class XType { final int val;
XType(int val) { this.val=val; }
}
Даже короче и с боксингом примитивов проблемы нет.
SP>·>Зачем ты это всё рассказал-то?
SP>ну ты ведь попросил, я рассказал.
Ну это уже было в стартовом сообщениии. А вопрос был об альтернативах.
SP>·>Кстати, вместо твоей колбасы с генериками давно можно просто писать record XType(int value){}.
SP>возможно. java — не мой основной язык. Если это работает, тем более идиома нового типа будет актуальна.
У этой идиомы и другие недостатки. Например, нет никакого способа запретить таки использовать один и тот же тип в разных параметрах. При копи-пастах код начнёт расползаться.
Было
Receipt transfer(AccountFrom from, AccountTo to, MoneyAmount amount, MoneyFee fee);
кто-нибудь побыстрому накопипастил и получилось
Receipt transfer(AccountFrom from, AccountTo to, MoneyAmount amount, MoneyAmount discountAmount, MoneyFee fee);
и ищи баги опять...
Мой вариант с интерфейсом этим не страдает, т.к. новые методы в интерфейс нельзя копипастить.