Интерфейсы ActionScript с настраиваемыми пространствами имен

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

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.

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

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

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

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

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

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

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

1
задан Jukka Hämäläinen 16 September 2010 в 11:32
поделиться