出于某种原因,我无法使其工作(严重简化的代码失败):
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()
...
答案 0 :(得分: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();
}
答案 1 :(得分:1)
我认为它在同一个文件中无法与Helper和SomeClass一起使用。 初始化SomeClass时,Helper类尚未初始化,因此无法创建Helper对象。
将Helper移动到单独的文件应该可以解决问题。
答案 2 :(得分:1)
达伦的+1。另一种选择是将Helper
类移到文件顶部
class Helper {
}
package com.domain {
public class SomeClass {
private static var helper:Helper = new Helper();
}
}
答案 3 :(得分:0)
你需要生成一个构造函数并在类中声明你的变量,而不是函数:
package com.domain {
public class SomeClass {
private static var helper:Helper
public function SomeClass() {
helper = new Helper();
}
}
}
class Helper {
}