根据“工厂”设计模式构思库,我需要将接口区分为“只读”和可以具有写权限的接口。所以,我开发了以下架构:
public interface IReadOnly {
function get value (): Number;
}
public interface IReadWrite extends IReadOnly {
function set value (v:Number): void;
}
internal class ReadWrite implements IReadWrite {
public function get value (): Number {
return m_value;
}
public function set value (v:Number): void {
m_value = v;
}
protected var m_value:Number;
}
所以问题是:我无法访问类的实例上的getter。 Flex将拒绝编译以下代码:
function doSomething (rw:IReadWrite): void {
var num:Number = rw.value;
}
Flex告诉我:“1178:通过静态类型IReadWrite的引用尝试访问不可访问的属性值。”
当我用function setValue (v:Number): void;
之类的简单函数替换setter时,每件事情都顺利。
有人已经遇到过这种情况吗?这是编译器错误吗?任何可以解决问题的编译器参数?
谢谢你的关注。
答案 0 :(得分:1)
你的IReadWrite接口错误地扩展了ReadWrite类;它需要扩展IReadOnly接口。
我很惊讶编译器甚至允许你声明一个扩展类的接口。
答案 1 :(得分:0)
不确定您是否曾设法解决此问题,但我找到了解决方法。您需要将调用getter的对象强制转换为实际定义getter方法的Interface。所以函数调用看起来像这样:
function doSomething (rw:IReadWrite): void {
var num:Number = IReadOnly(rw).value;
}
它看起来很难看,但它完成了工作。