0



根据“工厂”设计模式构想一个库,我需要区分被认为是“只读”的接口和那些也可以具有写入权限的接口。因此,我开发了以下架构:

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 的引用访问不可访问的属性值。”
当我用一个简单的函数替换 setter 时,比如function setValue (v:Number): void;一切顺利。

有人已经遇到过这种情况吗?它是编译器错误吗?任何可以解决问题的编译器参数?

感谢您的关注。

4

2 回答 2

1

您的 IReadWrite 接口错误地扩展了 ReadWrite 类;它需要扩展 IReadOnly 接口。

我很惊讶编译器甚至允许您声明一个扩展类的接口。

于 2012-04-29T04:04:57.407 回答
0

不确定您是否曾经设法解决此问题,但我找到了解决方法。您需要将调用 getter 的对象转换为实际定义 getter 方法的接口。所以函数调用看起来像这样:

    function doSomething (rw:IReadWrite): void {
    var num:Number = IReadOnly(rw).value;
}

它看起来很丑,但它可以完成工作。

于 2013-04-23T18:33:02.550 回答