没有类没有定义的错误

时间:2016-08-21 17:13:15

标签: java compilation

我有以下二叉树的起始代码。我只是想知道,如果在{A}和B行尚未定义BinaryTree类,为什么我在A行和B行报告中无法得到编译错误 - BinaryTree not defined。 我假设,C行是完全定义类的地方。

public class BinaryTree {
private int data;
private BinaryTree left;  // Line A
private BinaryTree right;  // Line B

public BinaryTree(int num) {
this.data = num;
this.left = null;
this.right = null;
}
// getters and setters.
}  // Line C

1 个答案:

答案 0 :(得分:1)

要扩展tkausl的注释,这里是关于作用域的Java语言规范: http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.3

具体做法是:

  

顶级类型(第7.6节)的范围是声明顶级类型的包中的所有类型声明。

如果你跳到第7.6节,甚至有一个例子可以解决你的问题:http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.6

  

示例7.6-2。顶级类型的范围

package points;
class Point {
    int x, y;           // coordinates
    PointColor color;   // color of this point
    Point next;         // next point with this color
    static int nPoints;
}
class PointColor {
    Point first;        // first point with this color
    PointColor(int color) { this.color = color; }
    private int color;  // color components
}
     

该程序定义了两个在类成员声明中互相使用的类。因为类类型Point和PointColor具有包点中的所有类型声明,包括当前编译单元中的所有类型声明作为其范围,所以此程序正确编译。也就是说,前向引用不是问题。

只是为了完整性,前瞻性参考(我不得不仔细查看......): Forward reference vs. forward declaration

TLDR :Java规范说这应该没问题,所以它是。