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假设;可以作为返回值传递)。

以下解决方案将静态 var 的创建推迟到初始化内部类时,即在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 回答