【问题标题】:create interface object in mxml在 mxml 中创建接口对象
【发布时间】:2010-09-07 20:59:03
【问题描述】:

假设我有一个界面

public interface IFoo {
   ...
}

我有几个实现类

public class Foo implements IFoo {
    ...
}

...

public class Bar implements IFoo {
    ...
}

...

public class Baz implements IFoo {
    ...
}

我想像这样在 MXML 中引用 IFoo

<ns:IFoo id="myfoo"/>

并让它在运行时由工厂实例化。

但是,编译器不允许我这样做——它试图在生成的 ActionScript 中执行“new IFoo”。

如何解决这个问题?如何在 MXML 中纯粹使用接口和工厂?

【问题讨论】:

    标签: apache-flex flash mxml


    【解决方案1】:

    声明 MXML 子对象会实例化该类型的对象 - 您不能简单地在 MXML 中声明属性而不将实例与其关联。

    鉴于此 - 没有办法达到相当于

    public var myFoo:IFoo;
    

    在您的 MXML 中。

    正如 James 指出的,您可以使用 ClassFactory 来实现以下目标:

    <mx:ClassFactory class="{Foo}" id="fooFactory" />
    

    但您需要致电fooFactory.newInstance() 才能获得IFoo

    【讨论】:

      【解决方案2】:

      您可以使用组件根节点中的implements="IFoo" 属性在MXML 组件中实现接口。

      编辑:

      对不起,我误解了你的问题。我不知道用纯 mxml 实现工厂的方法。我猜你必须使用 Actionscript 或 mxml 状态来实现类似的行为。

      【讨论】:

      • 我不想创建实现接口的组件。我想实例化一个实现接口的组件。
      【解决方案3】:

      查看ClassFactory。这就是项目渲染器之类的实例化方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 2013-02-06
        • 2019-09-27
        • 2015-05-21
        • 2013-08-28
        相关资源
        最近更新 更多