4

我想使用内部类来创建对象层次结构以避免混乱我当前项目的 API。基本思想是使用这样的东西:

package foo {
    public class Bar {
        public static const BLUBB:Blubb = new Blubb();
        public static const ZONK:Zonk = new Zonk();
    }
}
class Blubb {
    public const GNARF:Gnarf = new Gnarf();
    public const BLUBB_BLAH:String = "blubb-blah";
}
class Gnarf {
    public const GNARF_BLAH:String = "gnarf-blah";
}
class Zonk {
    public const ZONK_BLAH:String = "zonk-blah";
}

这样我就可以像使用它一样someFunction(Bar.BLUBB.GNARF.GNARF_BLAH);

但是,显然 Actionscript 不太喜欢这种结构(尽管 FDT5 编译它时没有给出任何关于它的问题)并给我以下运行时错误:

Exception fault: TypeError: Error #1007: Instantiation attempted on a non-constructor.
    at foo::Bar$cinit()
    at global$init()
    at ...

堆栈跟踪的其余部分导致我第一次尝试访问Bar.

真的不可能以这种方式使用内部类,还是我只是错过了一些秘密的巫术?

4

1 回答 1

2

我无法让它按您的意愿工作,但我发现了一些可能有用的东西:

package foo {
    public class Bar {
        public const BLUBB:Blubb = new Blubb();
        public const ZONK:Zonk = new Zonk();
    }
}
class Gnarf {
    public const GNARF_BLAH:String = "gnarf-blah";
}
class Blubb {
    public static const GNARF:Gnarf = new Gnarf();
    public const BLUBB_BLAH:String = "blubb-blah";
}
class Zonk {
    public const ZONK_BLAH:String = "zonk-blah";
}

我不得不取出 Bar 变量的静态修饰符,但我发现只要在Blubb 上方定义 Gnarf,我就可以将“静态”添加到 Blubb.GNARF。基于此,我尝试将所有三个内部类都移到包定义之上,但事实证明这是不允许的。(此外,您不能直接从另一个文件访问内部类,因此在其中一个文件中包含静态变量本身并没有用。)

我还尝试将 Bar.BLUBB 设为静态 var 并在静态初始化块而不是内联中对其进行初始化,但这并没有什么区别。我认为,如果您想为静态变量使用某种类类型,则必须在单独的文件中定义该类类型。

于 2012-05-03T19:19:57.893 回答