interface - 在 Haxe 中,当子类中未在 "abstract"父类(super class)中定义方法时,如何强制执行子类中的方法声明?

标签 interface abstract-class haxe type-constraints

我试图以这样的方式编写类定义:当在函数或 var 声明(例如 function instantiateMain(mainCls:Class<MyAbstractClass>) )中使用时,它应该强制子类具有所需的方法规范。例如,init()方法。

所以...

是否有一种方法以抽象方式编写类,以便在编译时检查其子类(调用 ... extends MyAbstractClass 的子类)以声明特定方法,并且能够扩展另一个现有类(例如: AbstractSprite extends SpriteAbstractMC extends MovieClip )?

或者,Class<...> 可以列出多个约束类型(类和接口(interface))吗?

例如,Class<Sprite, MyInterface> - 不过已经尝试过了,也许我的语法不正确。

编辑:

为了向问题添加更多上下文,这是我尝试运行的代码:

package;

import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.Lib;

class MyInitializer {
    public static var INSTANCE:MyInitializer;
    public static var STAGE:Stage;

    public static function init(clazz:Class<DisplayObject, InterfaceMain>) {
        if (INSTANCE != null) return INSTANCE;

        //Create a new instance of this global class:
        INSTANCE = new MyInitializer();

        //Add the 'Main' class to the stage:
        STAGE.addChild( Type.createInstance( clazz, [] ) );

        return INSTANCE;
    }
}

class SpriteMain extends Sprite implements InterfaceMain {

}

class MovieClipMain extends MovieClip implements InterfaceMain {

}

interface InterfaceMain {
    function init():Void;
}

最佳答案

您可以将类型定义为 multiple constraints :

typedef Measurable = {
  public var length(default, null):Int;
}

class Constraints {
  static public function main() {
    trace(test([]));
    trace(test(["bar", "foo"]));
    // String should be Iterable<String>
    //test("foo");
  }

  static function
  test<T:(Iterable<String>, Measurable)>(a:T) {
    if (a.length == 0) return "empty";
    return a.iterator().next();
  }
}

关于interface - 在 Haxe 中,当子类中未在 "abstract"父类(super class)中定义方法时,如何强制执行子类中的方法声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348210/

相关文章:

c++ - 具有许多功能的python-c++接口(interface)的代码的pythonic结构是什么?

javascript - TypeScript 中的条件接口(interface)

c++ - 如何从友元类访问抽象类的私有(private)成员?

c++ - 为什么这个没有声明任何纯虚成员函数的类是抽象的呢?

javascript - 引用错误: SomeName is not defined (exposing class in Haxe)

haxe - 是否有一种编程方式可以在运行时更改 Haxe/Starling 中的 vsync?

java - 函数参数 : abstract class or interface?

java - 如何要求参数是实现接口(interface)的类?

php - 获取实例化类的文件名

javascript - Haxe和jQuery Extern Library各函数