【问题标题】:Haxe access Class<T> static fieldsHaxe 访问 Class<T> 静态字段
【发布时间】:2019-11-05 07:11:21
【问题描述】:

我有三个类,我希望能够从返回的Class&lt;Access&gt; 中调用静态函数。我想根据条件选择班级类型。

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

【问题讨论】:

    标签: class static haxe


    【解决方案1】:

    您不能在 Haxe 中覆盖静态函数。 但是您可以通过简单地删除远程和本地中的覆盖来实现您想要做的事情

    【讨论】:

      【解决方案2】:

      可以用单例来完成。

      但是,问题仍然可能与 Haxe 中的此类功能是否存在有关。

      【讨论】:

        【解决方案3】:

        根据目标,您可以将类强制转换为接口/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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-07
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多