スーパークラスでサブクラスタイプを取得したい。私は試した
if(this is SubClass1)
スーパークラスでしたが失敗しました。
スーパークラスは自分のサブクラスについて知らず、知るべきではありません。サブクラスはスーパークラスを拡張する必要があり、スーパークラスについて知っています。
あなたが達成しようとしていることは不可能です。問題/アーキテクチャを解決する別の (より良い) 方法があるはずです。
あなたのコードは動作します:
package{
import flash.display.Sprite;
public class TestSuperClass extends Sprite{
public function TestSuperClass(){
super();
trace((new SuperClass).isSubclass); // Output : false
trace((new Extended).isSubclass); // Output : true
}
}
}
internal class SuperClass
{
public function get isSubclass() : Boolean{
return this is Extended;
}
}
internal class Extended extends SuperClass {}
あなたはそれを動的に行うことができます(それは醜く、パフォーマンスに優しくありませんが、それは仕事をします):
package{
import flash.display.Sprite;
public class TestSuperClass extends Sprite{
public function TestSuperClass(){
super();
trace((new SuperClass).isSubclass); // Output : false
trace((new SuperClass).superClass); // Output : Object
trace((new Extended).isSubclass); // Output : true
trace((new Extended).superClass); // Output : SuperClass
}
}
}
import flash.utils.describeType;
internal class SuperClass
{
public function get isSubclass() : Boolean{
return describeType(this).@base.toString() != "Object";
}
public function get superClass() : String
{
return describeType(this).@base.toString().split("::").pop();
}
}
internal class Extended extends SuperClass {}