2012-05-03 15 views
4

現在のプロジェクトのAPIが乱雑にならないように、内部クラスを使用してオブジェクトの階層を作成したいと考えています。私はFDT5約frellを与えることなく、それをコンパイルするものの、どうやらActionScriptは(かなりこの構造好きではないsomeFunction(Bar.BLUBB.GNARF.GNARF_BLAH);どのように静的コンテキストで内部クラスを使用できますか?

と同じように使用できるように

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"; 
} 

:基本的な考え方は、このようなものを使用することですそれ)と私は、次のランタイムエラー与える:私は最初Barの静的定数のいずれかにアクセスしようとした点につながるスタックトレースの残りの部分と

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

を。

このような方法で内部クラスを使用することは本当に不可能ですか、私はいくつかの秘密のブードゥーを見逃していますか?

+0

私の推測は、[static initializer](http://manishjethani.com/archives/2008/03/31/static-initializers-in-as3)ですが、私は動作させていませんまだ。 –

答えて

3

私はあなたが望んでいたとして、この作業を取得することができませんでしたが、私はいくつかの潜在的に有用なものが見つかりました:私はバーの変数のための静的な修飾子を取らなければならなかったが、私は私が追加できることを見出した

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"; 
} 

を"static"からBlubb.GNARF までの間はです。GnarfはBlubbの上で定義されています。これに基づいて、3つの内部クラスをすべてパッケージ定義の上に移動しようとしましたが、それは許されません。 (また、別のファイルから内部クラスに直接アクセスすることはできませんので、静的変数を持つことはそれ自体有用ではありません)。

また、Bar.BLUBBにstatic varを作成し、インラインではなく静的な初期化ブロックですが、違いはありません。静的変数に特定のクラス型を使用する場合は、そのクラス型を別のファイルで定義する必要があります。

+0

私はあなたの提案やヒットに続いて、もう少し問題をぶち壊してしまって、私が望むやり方でやりたいことができないという結果になった。ですから、きれいなAPIのために、元のファイルからすべての内部クラスを取り出し、それぞれを別々のクラスファイルに入れてパッケージに入れました。 ^^ – arotter

関連する問題