我对Java的类和接口的语义比对Actionscript的语义更加熟悉,但是我有一些在Java中有效但在Actionscript中不起作用的代码示例。这种降低是一个严重的问题,因为我试图通过代码编写从Java DTO生成Actionscript值对象的方法,除非语义相同,否则我将陷入严重麻烦。
这是在Java中有效但无法在Actionscript中编译的代码:
接口A:
public interface Ia {
function makeCopy():Ia;
}
接口B:
public interface Ib extends Ia {
}
B类(不会编译):
public class B implements Ib {
public function makeCopy():Ib {
return null;
}
}
我不明白为什么当接口B扩展接口A时,类B抛出有关“ makeCopy”不兼容签名的编译错误……因此,没有违反类型或不兼容性。如果这只是Actionscript的限制,那么有人可以建议一种重新编码的方法吗?
注意:我已经尝试将接口B更改为此,它在接口B中抛出错误(在Java中有效):
public interface Ib extends Ia {
function makeCopy():Ib;
}
在AS3中,方法签名在实现和继承上都必须相同,因此,如果您最初定义makeCopy
as 的返回类型Ia
,这就是它必须保留在所有后代接口及其实现中的方式。
但是,您可以做的是返回一个对象实例,该实例Ib
通过使用签名的函数实现Ia
,因为它仍然是的有效实现Ia
:
public class B implements Ib {
public function makeCopy():Ia {
return this;
}
public function B() {
trace(makeCopy() is Ia); //true
trace(makeCopy() is Ib); //true
trace(makeCopy() is B); //true
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句