Неявное приведение типов в Java (передача оболочек типов значений методам, ожидающим обычное целое или длинное число)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Неявное приведение типов в Java (передача оболочек типов значений методам, ожидающим обычное целое или длинное число)

Сообщение Anonymous »

В некоторых языках ООП стало довольно распространенным извлекать выгоду из лучшего из обоих миров:
  • Лучшее из объектов значащего типа< /strong> (в Java это будет @Value (Lombok) или, в последнее время, просто запись), чтобы избежать «примитивной одержимости» и передавать простые оболочки значений. Мы можем получить дополнительное преимущество, потенциально выполнив дополнительную проверку в их конструкторе, но основная возможность — это прямое сравнение значений двух разных объектов.
  • Лучшее из неявных преобразований типов (например, если ваш тип значения является оберткой вокруг целого числа, тогда вы все равно можете передать его везде, где ожидается целое число каким-либо уже написанным методом )
В настоящее время в C# пункта 2 легко достичь с помощью неявных и подобных методов. Но я не знаю, как это сделать в Java, поскольку нельзя наследовать пользовательские классы от собственных классов Integer или Long.
Пример:

Код: Выделить всё

// 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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»