2016-12-02 65 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是空并且没有成员或静态属性或方法。

解决方案:

我发现的唯一的解决办法是确保任何引用类其他类本身不是那些类引用。