Интерфейсы ActionScript с пользовательскими пространствами имен - PullRequest
1 голос
/ 16 сентября 2010

Есть ли способ заставить интерфейс играть вместе с пользовательским пространством имен?Пример следующий.

IHeaderRenderer.as:

public interface IHeaderRenderer{
 function set header(value:IHeader):void;
 function get header():IHeader;
}

HeaderRenderer.as

import fi.test.internalNamespace;
public class HeaderRenderer implements IHeaderRenderer{
    internalNamespace function set header(value:IHeader):void{
         // do something
    }

    internalNamespace function get header():IHeader{
         // do something
    }
}

Это дает вам основную ошибку компилятора:

1044: Метод интерфейса получает заголовок в пространстве имен fi.gridutils.headerrenderers: IHeaderRenderer не реализован классом fi.gridutils.headerrenderers.implementation: HeaderRenderer.

Почему это необходимо, спросите вы.Я разрабатываю компонент, в котором средства доступа к заголовкам не должны быть непосредственно видны конечному пользователю (разработчику) компонентов, но если разработчик хочет создать свой собственный Renderer, он должен знать, что они необходимы.Это связано с тем, что родительский компонент будет использовать эти средства доступа для предоставления настраиваемому средству визуализации данных, необходимых для правильной визуализации заголовка.

Теперь, на мой взгляд, существует только три варианта:

1) использовать общественный контроль доступа.Это имеет недостаток, что конечный разработчик увидит средства доступа, к которым он не должен иметь прямой доступ.Плюс они добавляют ненужный беспорядок, поскольку они появляются в автозаполнении.

2) не используют интерфейс.Это означает, что конечный пользователь имеет довольно плохие возможности для дальнейшей разработки компонента.

3) использует интерфейс, но опускает средства доступа, которые используют internalNamespace.Теперь конечный разработчик не будет знать, что ему следует также добавить средства доступа к заголовкам в свой пользовательский класс headerrenderer, который заканчивается во Flash Player, выдавая разработчику следующую ошибку во время выполнения:

Невозможно создать свойство internalNamespace /:: заголовок на fi.gridutils.headerrenderers.implementation.HeaderRenderer.

Извините за все болтовню.Есть какие-нибудь хитрые идеи, как можно справиться с такой ситуацией?

1 Ответ

2 голосов
/ 16 сентября 2010

В ActionScript методы интерфейса должны быть открытыми. Чем хорош интерфейс, если вы не можете гарантировать, что компонент, использующий его, может получить доступ к соответствующим методам интерфейса?

при этом вы можете использовать метаданные exclude для предотвращения отображения свойств в подсказках кода.

Примерно так:

[Exclude(name="header", kind="property")] 

Подробнее

...