我用私人制定者和公共吸气者制作了一个测试课程。原始的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;
}
答案 0 :(得分:5)
This is a bug in the compiler。不幸的是,吸气剂和定位器都必须具有相同的可见性。如果您只需要在类中设置变量,或者使用具有不同名称的setter函数(就像您的isLoggedInSet
一样),请直接使用变量。