Haxe access Class <T>статические поля - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть три класса, и я хотел бы иметь возможность вызывать статические функции из возвращенного 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 ]

1 голос
/ 05 ноября 2019

Вы не можете переопределить статическую функцию в Haxe. Но вы, вероятно, можете добиться того, что вы пытаетесь сделать, просто удалив переопределение в Remote и Local

0 голосов
/ 07 ноября 2019

В зависимости от цели, вы можете приводить класс к interface / typedef, чтобы извлекать значения способом type-safe-ish. «Переопределение» не работает для статических методов

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

0 голосов
/ 05 ноября 2019

Может быть сделано с помощью синглетонов.

Однако все же может возникнуть вопрос, существует ли такая особенность в Haxe.

...