我有3个类,我希望能够从返回的Class<Access>
中调用静态函数。我想根据条件选择类类型。
class Access {
public static function get(item: Int): Int { return -1; }
public static function getAccessType(): Class<Access> {
if(Client.hasConnection())
return Remote;
else return Local;
}
}
class Remote extends Access {
override public static function get(item: Int): Int { return Server.getItem(item); }
}
class Local extends Access {
override public static function get(item: Int): Int { return Client.getItem(item); }
}
答案 0 :(得分:2)
您不能在Haxe中覆盖静态函数。 但是,您可以通过简单地删除“远程”和“本地”中的替代来实现您要尝试的操作
答案 1 :(得分:1)
可以单例完成。
但是,仍然有一个问题可能与Haxe中的这种功能是否存在有关。
答案 2 :(得分:1)
根据目标,您也许可以将类强制转换为接口/ typedef,从而以一种类型安全的方式提取值。 “覆盖”不适用于静态方法
class Test {
static function pick(z:Bool):HasGetItem {
return z ? cast A : cast B;
}
static function main() {
trace("Haxe is great!");
trace(pick(false).getItem(1));
trace(pick(true).getItem(2));
}
}
@:keep class A {
public static function getItem(i:Int):Int return 10;
}
@:keep class B {
public static function getItem(i:Int):Int return 5;
}
typedef HasGetItem = {
getItem:Int->Int
}