Вопрос

Есть ли способ синтезировать геттеры/сеттеры в AS3?Очень часто у вас есть класс с множеством переменных, особенно в математических вычислениях (модель в шаблоне MVC), которые вы хотели бы предоставить.Есть ли что-то вроде свойства синтеза в Objective-C, которое позволяет генерировать геттеры/сеттеры?

Спасибо,

Нава

Это было полезно?

Решение

РЕДАКТИРОВАТЬ:Если вы хотите использовать IDE (eclipse).Вы можете пойти направо. Щелкните класс->Источник->Создать геттеры и сеттеры.

Это не то же самое использование, что и синтез, но если вы хотите просто раскрыть их и не использовать нотацию getMethod(), это может помочь вам объявить методы с ключевыми словами get/set следующим образом.

public function get example() : int
{
             return example;
}
public function set example( value : String ) : void
{
             example = value;
}

Когда вы используете его во время доступа, вы можете использовать переменные, как если бы они были общедоступными, и методы будут вызываться вместо прямого доступа.

Другие советы

Вы можете попробовать регулярное выражение. Прежде чем пытаться сделать это, сделайте резервную копию.

Например, если ваш private переменные имеют имена _str и ты хочешь, чтобы это public геттер/сеттер, который будет назван str, вы можете использовать следующие шаблоны.Нажмите Ctrl-F в flex builder (или eclipse), установите флажок регулярного выражения и добавьте следующие шаблоны в поля поиска и замены соответственно.Теперь нажмите «Найти», чтобы найти объявление свойства, и нажмите «Заменить», чтобы сгенерировать методы установки и получения.

^((\t)+)private\s+var\s+_(\w+):(\w+)\s*;\s*(\n)

$0$5$1public function set $3(value:$4):void$5$1{$5$1$2_$3 = value;$5$1}$5$5$1public function get $3():$4$5$1{$5$1$2return _$3;$5$1}$5$5

Этот шаблон был протестирован на

        private var _str:String;//indented by two tabs

И он успешно сгенерировал:

    private var _str:String;

    public function set str(value:String):void
    {
        _str = value;
    }
    public function get str():String
    {
        return _str;
    }

Для тех, кто использует Flex Builder 3 IDE, существуют плагины для создания и размещения фрагментов кода, например.здесь: http://www.insideria.com/2008/04/flex-builder-enhancements-snippets-and-todo.html (на этом сайте собрано еще несколько небольших, но полезных инструментов)

Их можно использовать для более или менее удобной генерации геттеров/сеттеров.

Однако я создаю явные геттеры и сеттеры только в том случае, если мне нужно разместить там дополнительный код.Некоторые говорят, что инкапсуляция нарушается, если вы не используете геттеры и сеттеры.Однако с языком, в котором вы можете добавлять геттеры и сеттеры позже, не меняя интерфейс, я не думаю, что это уже так.Для пользователя совершенно прозрачно, если он использует простое назначение переменной или набор функций varName(arg:object):void.

Также имейте в виду, что если вы создадите переменную [Bindable] (т.без явного имени события), компилятор создает геттеры и сеттеры для вашей переменной, даже не замечая этого (за исключением того, что, конечно, уже есть геттеры и сеттеры).Кстати, это быстрый и грязный способ реализации интерфейсов, которые объявляют функции получения и установки.

Если вы просто сделаете это общедоступным свойством, вам не придется беспокоиться о геттерах и сеттерах:

public var str:String;

Однако если вам нужно что-то вроде диспетчеризации событий, чтобы уведомить себя об изменениях свойств, вам придется написать это самостоятельно.Надеюсь, какая бы IDE, которую вы используете, поможет вам сгенерировать такой код, или вам может потребоваться настроить какой-то фрагмент кода, который DIE может внедрить за вас.

По возможности избегайте копирования и вставки: вы обязательно пропустите изменение названия чего-то, что может вызвать у вас проблемы в будущем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top