基本上,我想用不同的参数覆盖父类。例如:
class Hold<T> {
public var value:T;
public function new(value:T) {
set(value);
}
public function set(value:T) {
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后覆盖该类,例如:
class HoldMore extends Hold<T> {
public var value2:T;
public function new(value:T, value2:T) {
super(value);
set(value, value2);
}
override public function set(value:T, value2:T) {
this.value = value;
this.value2 = value2;
}
}
Run Code Online (Sandbox Code Playgroud)
显然这会返回一个错误,Field set overloads parent class with different or incomplete type
. 有没有解决的办法?我尝试使用 a public dynamic function
,然后set
在new()
函数中进行设置,但这给出了一个非常相似的错误。有什么想法吗?
这只是对 @stroncium 答案的补充,这是完全正确的。
这是一个示例:
class Hold<T> {
public var value:T;
public function new(value:T) {
set(value);
}
public function set(value:T) {
this.value = value;
}
}
class HoldMore<T> extends Hold<T> {
public var value2:T;
public function new(value:T, value2:T) {
super(value);
setBoth(value, value2);
}
// you cannot override "set" with a different signature
public function setBoth(value:T, value2:T) {
this.value = value;
this.value2 = value2;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用数组作为参数或保存多个值的动态对象,以便使用相同的方法“设置”它们,但会丢失一些编译器的类型检查。