2016-12-02 146 views
1

我在使用VSC的大型項目中發生了幾次奇怪的錯誤。在特定範圍內丟失屬性的單例類

我有一個引用一堆類的單例類,其中一些類引用了那個單例類。在該項目的開發過程中,有兩次這些類在運行時完全失去了singleton類的屬性和方法。

比如我會做(比方說單例類是A):

在C類:

A.someMethod()//no problem 

在課堂d:

A.someMethod()//error A is an object but has no properties or method 

在E類:

A.someMethod();//no problem 

因此,出於某種原因機智在D的範圍內,A是一個空對象。

這發生了2個類,每次我通過刪除項目中任何位置的所有這些類的引用來修復它,然後重命名這些類的模塊,註釋掉這些類中的所有代碼,然後正確地重命名該模塊,編譯然後所有都是固定的,我可以添加這些類的引用並恢復代碼,現在單例類引用不再是空的。

所以這很奇怪,任何人都有這方面的經驗?這是一個編譯器錯誤或一些Javascript怪異?

好吧,我做了小班嘗試和我達成同樣的問題:

class A 
{ 
    constructor() 
    { 
     new B(); 
     C; 
    } 

    public static getClassA():A 
    { 
     return new A(); 
    } 
} 

如果B和C都具有一個引用那麼參考A是一個空對象(甚至不是一個類)。如果B和C被A的靜態方法引用(所以它不僅僅是一個構造函數),顯然也會發生同樣的情況。不確定成員方法。即使我沒有實例化C類,C類也會遇到同樣的問題。

對此問題的更新:問題是任何在構造函數中引用另一個類(以某種方式引用)的類,以及以任何方式直接引用第一個類(import,static,instantiation等)的其他類引用第一個類在運行時完全清空,所有屬性/方法成員或靜態都沒有了。

+0

我認爲你需要添加代碼來顯示你的應用程序的流程:你什麼時候實例化類c,d,e? A看起來像什麼,你是如何實現單身人士的? – Kokodoko

+0

這是很多代碼,我會看看如果我可以用簡單的類來重現它。 – BotMaster

回答

0

這個問題沒有得到太多的興趣,所以這裏是我發現的答案。

情況:

甲類不在構造類B.參考 B類不引用類A(以任何方式)

後果:

然後B級的內部,類A是空並且沒有成員或靜態屬性或方法。

解決方案:

我發現的唯一的解決辦法是確保任何引用類其他類本身不是那些類引用。