Я ветеран Java, который изучает Kotlin. Я немного озадачен тем, как взять параметры конструктора, предоставленные дочернему классу, и преобразовать их в параметры, требуемые родительским классом. Проблема возникает, когда параметры, предоставленные ребенку, не подходят для родителя.
Например, когда у меня IntelliJ IDEA, преобразовать следующее в Kotlin ...
class Base
{
final int w;
final int h;
Base(int w, int h)
{
this.w = w;
this.h = h;
}
}
class Derived extends Base
{
Derived(int x)
{
// some complex derivation
Converter c = new Converter(x);
super(c.a, c.b);
}
}
class Converter
{
final int a;
final int b;
Converter(int x)
{
a = x + 2;
b = x - 2;
}
}
Я получаю следующее, включая ошибку в указанной позиции о том, что параметры не были переданы для w
и h
...
open class Base(val w: Int, val h: Int)
class Derived(x: Int) : Base() {
// ^ error
init {
// some complex derivation
val c = Converter(x)
// How do I provide c.a and c.b?
}
}
class Converter(x: Int) {
val a: Int
val b: Int
init {
a = x + 2
b = x - 2
}
}
Каково общее решение этой проблемы? (Понятно, что я не делаю ничего такого простого, как показано здесь. Я упростил просто, чтобы представить проблему.)