- Лучшее из объектов значащего типа< /strong> (в Java это будет @Value (Lombok) или, в последнее время, просто запись), чтобы избежать «примитивной одержимости» и передавать простые оболочки значений. Мы можем получить дополнительное преимущество, потенциально выполнив дополнительную проверку в их конструкторе, но основная возможность — это прямое сравнение значений двух разных объектов.
- Лучшее из неявных преобразований типов (например, если ваш тип значения является оберткой вокруг целого числа, тогда вы все равно можете передать его везде, где ожидается целое число каким-либо уже написанным методом )
Пример:
Код: Выделить всё
// This is technically not an Integer, but a value type object (record)
public record PositiveInteger(Integer value) {
public PositiveInteger{
if (value < 0) {
throw new IllegalArgumentException();
}
}
}
...
// This expects an Integer. I should not be able to pass a PositiveInteger
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/implicit-casts-in-java-passing-value-type-wrappers-to-methods-expecting-a-regul[/url]