我得到這個類,我們稱之爲:Klass。無理由調用構造函數
Klass類有一個參數,它的構造函數是一個默認值爲null的數組。
我在另一個類中創建了類Klass的一個對象,我們稱它爲:「MotherClass」。
現在,當它變得很奇怪,在實例化對象Klass之後,Klass的構造函數被再次調用,恰好在MotherClass的構造函數結束之後(我放置了一個斷點並且我一步一步地),使用null構造函數參數。
的事情是,我沒有任何東西正在調用克拉斯的構造函數的第二次,不知道有什麼可以再次調用該構造函數的堆棧跟蹤...
任何想法?
謝謝。
(克拉斯實現一個接口,和我使用一個數組,不知道這是什麼影響作出一個實例)
添加代碼的要求:
這是類MotherKlass:
public class Unit extends EntityVO{
public function Unit(level:int = 1)
{
//init vars and stuff
//...
//
initLevelData();
applyLevel = level;
}
private function initLevelData():void {
levelData[1] = [500, [[Spawn, this.entityToSpawn.type, this.entityToSpawn.level, 120]], "unit_level1"];
levelData[2] = [1000, [[Spawn, this.entityToSpawn.type, this.entityToSpawn.level, 90]], "unit_level2"];
levelData[3] = [2000, [[Spawn, this.entityToSpawn.type, this.entityToSpawn.level, 80]], "unit_level3"];
levelData[4] = [5000, [[Spawn, this.entityToSpawn.type, this.entityToSpawn.level, 60]], "unit_level4"];
}
override public function set applyLevel(level:int):void {
power = power/maxPower * levelData[level][0];
maxPower = levelData[level][0];
behavior = levelData[level][1];
for (var i:int = 0; i < behavior.length; i ++){
_behaviorSteps[i] = new behavior[i][0](behavior[i].slice(1));
_behaviorReqs.push(_behaviorSteps[i].req);
}
}
}
}
}
,這是克拉斯:
public class Spawn {
public class Spawn implements IBehavior
{
private var _entityType:String;
private var _entityLevel:int;
private var _spawnRate:int;
public function Spawn(params:Array = null){
//had to put the if because of the second weird call to the constructor with null
if(params){
_entityType = params[0];
_entityLevel = params[1];
_spawnRate = params[2];
}
}
}
}
}
你能爲MotherClass和Klass發佈一個非常簡化的類定義版本嗎? – inhan
在斷點處看不到堆棧跟蹤可能是您通過某種異步機制到達該位置的一個信號。也許還有其他原因。但那是我的猜測。這就是我們可以做的所有事情w/out看到任何代碼:) –
另一個瘋狂的猜測 - 你的Klass是DisplayObject的後代,並且它的一個實例放在你的舞臺上在Adobe Flash CS中。這樣,這些實例就會使用默認值實例化,因此您會收到您檢測到的構造函數調用。 – Vesper