actionscript奇怪的getter / setter访问

时间:2012-04-29 03:44:46

标签: actionscript-3 interface getter-setter



根据“工厂”设计模式构思库,我需要将接口区分为“只读”和可以具有写权限的接口。所以,我开发了以下架构:

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时,每件事情都顺利。

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

谢谢你的关注。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

它看起来很难看,但它完成了工作。