有没有办法让界面与自定义命名空间一起玩?示例如下。
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中,在运行时向开发人员发出以下错误:
无法在fi.gridutils.headerrenderers.implementation.HeaderRenderer上创建属性internalNamespace / :: header。
对不起所有的抨击。任何狡猾的想法如何处理这种情况?
答案 0 :(得分:2)
在ActionScript中,接口方法需要公开。有什么好的接口,如果你不能保证使用它的组件可以访问相关的接口方法?
说,你可以使用排除元数据来防止属性出现在代码提示中。
这样的事情:
[Exclude(name="header", kind="property")]