在调用超级构造函数时引用"this"?

12 java constructor

我有一个A类并编写一个子类B.A只有一个构造函数是参数化的.B必须调用A的超级构造函数.现在我想使用Object作为参数.该对象应该调用B的方法.因此参数对象必须保存B的引用或必须是内部类.

public B(){
   super.(new parameter(this))
}
Run Code Online (Sandbox Code Playgroud)

现在当我想调用构造函数时... Eclipse说:

在显式调用构造函数时,不能引用'this'或'super'

我唯一能看到的就是一个set方法,将"this"-instance注入参数对象.我不想编辑超级班.

你有没有看到更好的方法呢?

Yis*_*hai 18

编译器真的阻止你在这里射击自己.B在调用超级构造函数之后才完全构造,所以如果你传递它(如果编译器允许它)作为引用,并且它调用B上的方法,则B将处于无效状态并导致各种类型令人讨厌的问题(事实上,A仍未初始化,也没有任何类别的链,包括Object).

显而易见的解决方案是提供B之外的功能并将其传递给参数的构造函数.具体的解决方案将取决于具体的问题,但B内部的静态嵌套类(由于同样的原因需要是静态的 - 内部类具有对外部类实例的隐式引用)可能提供该功能.也许你需要重新考虑参数B和它的超类之间的关系.这一切都取决于具体情况.

  • 你可以把它组合出来,将新类作为旧包的包装器.旧类是否实现了可以使用新对象实现的接口? (2认同)