7

何らかの理由でこれを機能させることができません(非常に単純化されたコードが失敗します):

package com.domain {
    public class SomeClass {
        private static var helper:Helper = new Helper();
    }
}

class Helper {
}

コンパイルしますが、最初のアクセス時にスローしますSomeClass

TypeError: Error #1007: Instantiation attempted on a non-constructor.
    at com.domain::SomeClass$cinit()
    ...
4

4 に答える 4

2

コンストラクター以外のエラーは、「まだ見たことがないクラスのコンストラクターを呼び出した」というコンパイラーの厄介な言い方です。少し賢い場合は、文句を言う前にファイル(コンパイル単位)の内部クラスをチェックできます... mehhh

静的変数privateへのアクセスを許可したことを考えると、明らかに、インスタンスを内部的にのみ使用するつもりですSomeClass仮定;戻り値として渡すことができます)。

次のソリューションは、静的変数の作成を、内部クラスが初期化されるとき、つまり、まだ存在しないときではHelper.cinit()なく、(おそらく暗黙的に)呼び出されるときまで延期します。SomeClass.cinit()Helper

package com.domain {
    public class SomeClass {

        public function doSomething(param:*):void {
            // ... use Helper.INSTANCE
        }

    }
}

class Helper {
    public static const INSTANCE:Helper = new Helper();
}
于 2014-03-07T07:30:04.567 に答える
1

同じファイル内のHelperとSomeClassの両方では機能しないと思います。SomeClassが初期化されるとき、Helperクラスはまだ初期化されていないため、Helperオブジェクトを作成できません。

Helperを別のファイルに移動すると、問題が解決するはずです。

于 2012-06-13T09:35:49.097 に答える
1

ダレンに+1。別のオプションは、Helperクラスをファイルの先頭に移動することです

class Helper {
}

package com.domain {
    public class SomeClass {
        private static var helper:Helper = new Helper();
    }
}
于 2014-05-19T17:55:23.653 に答える
0

コンストラクターを生成し、関数ではなくクラスで変数を宣言する必要があります。

package com.domain { 
    public class SomeClass { 
        private static var helper:Helper 
        public function SomeClass() {
           helper = new Helper(); 
        }
    } 
} 

class Helper { 
} 
于 2012-06-13T08:00:41.447 に答える