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和它的超类之间的关系.这一切都取决于具体情况.
| 归档时间: |
|
| 查看次数: |
4532 次 |
| 最近记录: |