В некоторых языках ООП стало довольно распространенным извлекать выгоду из лучшего из обоих миров:
Лучшее из объектов значащего типа< /strong> (в Java это будет @Value или, в последнее время, просто запись), чтобы избежать «примитивной одержимости» и передавать простые оболочки значений, с дополнительным преимуществом потенциального выполнения некоторой дополнительной проверки в их конструктор.
Лучшее из неявных преобразований типов (например, если ваш тип значения является оболочкой вокруг Integer, вы все равно можете передать его туда, где Integer будет пройден)
В настоящее время в C# пункта 2 легко достичь с помощью неявных и подобных методов. Но я не знаю, как это сделать в Java, поскольку нельзя наследовать пользовательские классы от собственных классов Integer или Long.
Пример:
public record PositiveInteger(Integer value) {
public PositiveInteger{
if (value < 0) {
throw new IllegalArgumentException();
}
}
}
...
public static printInteger(final Integer someInteger) {
print(someInteger.toString());
}
...
public static void main() {
Integer i = 1234;
printInteger(i);
PositiveInteger x = new PositiveInteger(6789);
printInteger(x); //
Подробнее здесь: [url]https://stackoverflow.com/questions/79054995/using-java-records-or-value-types-to-enhance-integer-or-long[/url]
В некоторых языках ООП стало довольно распространенным извлекать выгоду из лучшего из обоих миров: [list] [*][b]Лучшее из объектов значащего типа< /strong> (в Java это будет @Value или, в последнее время, просто запись), чтобы избежать «примитивной одержимости» и передавать простые оболочки значений, с дополнительным преимуществом потенциального выполнения некоторой дополнительной проверки в их конструктор. [*]Лучшее из неявных преобразований типов[/b] (например, если ваш тип значения является оболочкой вокруг Integer, вы все равно можете передать его туда, где Integer будет пройден) [/list] В настоящее время в C# пункта 2 легко достичь с помощью неявных и подобных методов. [b]Но я не знаю, как это сделать в Java[/b], поскольку нельзя наследовать пользовательские классы от собственных классов Integer или Long. Пример: [code]public record PositiveInteger(Integer value) { public PositiveInteger{ if (value < 0) { throw new IllegalArgumentException(); } } }
...
public static printInteger(final Integer someInteger) { print(someInteger.toString()); }
...
public static void main() { Integer i = 1234; printInteger(i);
PositiveInteger x = new PositiveInteger(6789); printInteger(x); //