2010-09-16 105 views
1

有沒有什麼辦法讓界面和自定義命名空間一起玩?示例如下。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中給運行時開發人員提供以下錯誤:

無法在fi上創建property internalNamespace/:: header .gridutils.headerrenderers.implementation.HeaderRenderer。

對不起所有的blabbing。任何狡猾的想法如何處理這種情況?

回答

2

在ActionScript中,接口方法需要是公共的。接口有什麼好處,如果你不能保證使用它的組件可以訪問相關的接口方法?

表示,您可以使用排除元數據來防止在代碼提示中顯示屬性。

事情是這樣的:

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

More info