Подтвердить что ты не робот

Возможно ли автообновление для классов, которые я создаю?

Можно ли использовать автобоксинг для создаваемых мной классов? Например, у меня есть этот подкласс Number.

public class UnsignedInteger extends Number {
    int n;

    public UnsignedInteger(int n) {
        if(n >= 0)
            this.n = n;
        else
            throw new IllegalArgumentException("Only positive integers are supported");
    }
}

Теперь UnsignedInteger i = new UnsignedInteger(88); работает отлично, но есть ли способ сделать этот компилятор: UnsignedInteger i = 88;? Это не для меня. Спасибо заранее!

4b9b3361

Ответ 1

Короче говоря, нет. Нет способа получить это для компиляции.

Java определяет только ограниченный набор предопределенных преобразований бокса.

Из JLS, раздел 5.1.7:

Конверсия бокса преобразует выражения примитивного типа в соответствующие выражения ссылочного типа. В частности, следующие девять преобразований называются конверсиями бокса:

  • От типа boolean до типа Boolean

  • От байт типа к типу Byte

  • От типа short до типа Short

  • Из типа char введите символ

  • Из типа int для ввода Integer

  • От типа long до типа Long

  • От типа float до типа Float

  • От типа double до типа Double

  • От нулевого типа до нулевого типа

Кроме того, можно подумать о перегрузке оператора = для выполнения этого преобразования, но перегрузка операторов не поддерживается в Java, в отличие от С++, где это было бы возможно.

Итак, ваше преобразование невозможно в Java.

Ответ 3

Короче: Нет, это невозможно. Для этого вам потребуется перегрузка оператора, которая недоступна на Java. Смотрите ссылку .

Ответ 4

Если вы используете Groovy, вы можете установить логическое поведение, выполнив метод asBoolean: http://groovy-lang.org/semantics.html#_customizing_the_truth_with_asboolean_methods

Пример:

class Color {
    String name

    boolean asBoolean(){
        name == 'green' ? true : false
    }
}

assert new Color(name: 'green')
assert !new Color(name: 'red')

Я знаю, что это не простая Java, но компилируется в байт-код и работает на JVM.