Haxe访问Class <T>静态字段

时间:2019-11-05 07:11:21

标签: class static haxe

我有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); }
}

3 个答案:

答案 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
}

https://try.haxe.org/#b2b87