Сообщение 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
}
}