是否有任何非hacky方法来确定类的超类是否实现了特定的接口?
例如,假设我有:
class A extends EventDispatcher implements StuffHolder {
protected function get myStuff():Stuff { ... };
public function getStuff():Array {
if (super is StuffHolder) // <<< this doesn't work
return super['getStuff']().concat([myStuf]);
return [myStuff];
}
class B extends A {
override protected function get myStuff():Stuff { ... };
}
我怎样才能以某种方式执行super is StuffHolder
测试呢?在这种情况下,它始终返回true
。
答案 0 :(得分:1)
在这种情况下,您可能必须将StuffHolder(并将其扩展EventDispatcher)定义为类,并将getStuff作为公共/受保护函数。然后,您可以在类A中重载getStuff函数,但不能在类B中重载。
package {
public class StuffHolder extends EventDispatcher {
function StuffHolder() {
}
protected function getStuff():Array{
return ["Default"];
}
}
}
package {
public class A extends StuffHolder {
function A {
super();
}
protected override function getStuff():Array {
return ["A"];
}
}
}
package {
public class B extends StuffHolder {
function B {
super();
}
}
}
答案 1 :(得分:1)
我没有完整的图片来弄清楚为什么你需要那种(奇怪的,可能已经破坏的)继承,但你能否将它改写为 if(这实际上是一个A实例)
如果是这样,你可以选择......
import flash.utils.getQualifiedClassName;
if (getQualifiedClassName(this) == 'A')
问题是,是运算符应该用在对象实例上。并且它一直有效到对象 - 我的意思是, A是B 对于每个 A 祖先或接口实现都是正确的。
我认为你可以为你的课程提出一个更好的结构。 这不是那么漂亮。
答案 2 :(得分:0)
我可以做一些涉及内省的事情,获取当前的类,找到它的父类,然后检查是否实现了StuffHolder
接口......但这看起来很难看:(