Информация об изменениях

Сообщение Re[8]: Обязательный именованный параметр с проверкой при ком от 26.07.2023 12:31

Изменено 26.07.2023 12:36 sergii.p

Re[8]: Обязательный именованный параметр с проверкой при ком
Здравствуйте, ·, Вы писали:

·>Предложи конструктивно как переписать правильно, чтобы ошибка была очевидна.


// Общая часть. Каждый раз переписывать не надо
class NewType<T, Id> {
    T value;
    public T to_underlying() {
        return value;
    }
    public NewType(T obj) {
        this.value = obj;
    }
    // можно ещё переопределить методы toString, hashCode, кому надо
}

// Каждый тип объявлять немного многословно. Не хватает typedef конструкции в языке
class XTag{}
class XType extends NewType<Integer, XTag> {
    XType(int val) { super(val); }
}

class YTag{}
class YType extends NewType<Integer, YTag> {
    YType(int val) { super(val); }
}


class HelloWorld {
    static void print(XType x, YType y) {
        //...
    }
    
    public static void main(String[] args) {
        var x = new XType(3);
        var y = new YType(42);
        print(x, y);
        //print(y, x); //Error YType cannot be converted to XType
    }
}
Re[8]: Обязательный именованный параметр с проверкой при ком
Здравствуйте, ·, Вы писали:

·>Предложи конструктивно как переписать правильно, чтобы ошибка была очевидна.


// Общая часть. Каждый раз переписывать не надо
class NewType<T> {
    T value;
    public T to_underlying() {
        return value;
    }
    public NewType(T obj) {
        this.value = obj;
    }
    // можно ещё переопределить методы toString, hashCode, кому надо
}

// Каждый тип объявлять немного многословно. Не хватает typedef конструкции в языке
class XType extends NewType<Integer> {
    XType(int val) { super(val); }
}

class YType extends NewType<Integer> {
    YType(int val) { super(val); }
}


class HelloWorld {
    static void print(XType x, YType y) {
        //...
    }
    
    public static void main(String[] args) {
        var x = new XType(3);
        var y = new YType(42);
        print(x, y);
        //print(y, x); //Error YType cannot be converted to XType
    }
}