在实例化类时无法访问专用setter(ActionScript 3)

时间:2011-11-08 17:12:02

标签: actionscript-3 flex flash-builder

我用私人制定者和公共吸气者制作了一个测试课程。原始的setter设置了更多的值,但为了简单起见我最小化了代码。

package Lib
{
    public class Test
    {
        private var _data:String;
        private var _isLoggedIn:Boolean;

        // isLoggedIn getter and setter
        public function get isLoggedIn():Boolean
        {
            return (_isLoggedIn == true && _data != null);
        }
        private function set isLoggedIn(value:Boolean):void
        {
            _isLoggedIn = value;
        }
        private function isLoggedInSet(value:Boolean):void
        {
            _isLoggedIn = value;
        }

        // constructor
        public function Test()
        {
            isLoggedIn = false;
            isLoggedInSet (false);
        }
    }
}

请注意,它编译得很好,我认为它按预期工作。但是,一旦我尝试在我的主mxml中使用它:

import Lib.Test;
protected function fubar():void
{
    var test:Test = new Test(); 
}

我在Test.as中遇到了这个错误(原文如此!):

Multiple markers at this line:
-1178: Attempted access of inaccessible property isLoggedIn through a reference with  static type Lib:Test.
-1059: Property is read-only.
-isLoggedIn

请注意,isLoggedInSet (false);运行正常。这是一个错误还是一个功能?感觉就像一个虫子......或者我做错了什么?

编辑:这感觉更加错误,但它确实有效:

private function get isLoggedIn():Boolean
{
    return (_isLoggedIn == true && _data != null);
}
public function get isLoggedInPublic():Boolean
{
    return isLoggedIn;
}

1 个答案:

答案 0 :(得分:5)

This is a bug in the compiler。不幸的是,吸气剂和定位器都必须具有相同的可见性。如果您只需要在类中设置变量,或者使用具有不同名称的setter函数(就像您的isLoggedInSet一样),请直接使用变量。