所以,问题或多或少都像我写的那样.我知道它可能根本不清楚所以我会举一个例子.
我有类Tree,其中有Node类,而Tree的空构造函数是:
public class RBTree {
private RBNode head;
public RBTree(RBNode head,RBTree leftT,RBTree rightT){
this.head=head;
this.head.leftT.head.father = head;
this.head.rightT.head.father = head;
}
public RBTree(RBNode head){
this(head,new RBTree(),new RBTree());
}
public RBTree(){
this(new RBNode(),null,null);
}
public class RBNode{
private int value;
private boolean isBlack;
private RBNode father;
private RBTree leftT;
private RBTree rightT;
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse给出了错误:"由于一些中间构造函数调用,没有封闭的RBTree实例可用于"空构造函数中的"新RBTree()".但是,如果我将RBNode更改为静态类,则没有问题.
那么为什么当类是静态的时它才起作用.
顺便说一下,我找到了一个简单的解决方案:
public RBTree(){
this.head = new RBNode();
}
Run Code Online (Sandbox Code Playgroud)
所以,我不知道第一段代码中的问题是什么.
Yis*_*hai 24
基本上,内部类(没有静态修饰符)具有对其外部类的实例的隐式引用,因此在创建外部类之前不能创建它.通过在调用this它时创建一个不能引用外部类,因为在调用super之前,外部类根本没有构造太多.适用于你的情况,head的赋值发生在对super的(隐式)调用之后,所以类的构造足以获得对它的引用.
所有这些规则都会阻止您通过引用未初始化的对象并让Bad Things(TM)发生而将自己射入脚中.
| 归档时间: |
|
| 查看次数: |
5540 次 |
| 最近记录: |