Закрытый установщик недоступен при создании экземпляра класса (ActionScript 3) - PullRequest
1 голос
/ 08 ноября 2011

Я сделал тестовый класс с частным сеттером и публичным геттером. Исходный установщик установил больше значений, но для простоты я свернул код.

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 (sic!):

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 Ответ

5 голосов
/ 08 ноября 2011

Это ошибка в компиляторе . К сожалению, и геттер, и сеттер должны иметь одинаковую видимость. Используйте переменную напрямую, если вам нужно, чтобы она была установлена ​​только внутри класса, или функцию установки с другим именем (точно так же, как ваш isLoggedInSet).

...