从Inner类的实例访问外部类属性

时间:2009-11-21 17:28:49

标签: java nested-class

给出以下代码:

public class Outer
{
   public final int n;
   public class Inner implements Comparable<Inner>
   {
      public int compareTo(Inner that) throws ClassCastException
      {
          if (Outer.this.n != Outer.that.n) // pseudo-code line
          {
               throw new ClassCastException("Only Inners with the same value of n are comparable");
//...

我可以用伪代码行替换什么,以便我可以比较Inner类的两个实例的n值?

尝试显而易见的解决方案(n != that.n)无法编译:

Outer.java:10: cannot find symbol
symbol  : variable n
location: class Outer.Inner
                    if (n != that.n) // pseudo-code line

1 个答案:

答案 0 :(得分:7)

  

与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。 - Java OO

你可以在内部类中编写一个getter方法,它返回外部类的n

Inner上的方法:

public int getOuterN() { return n; }

然后使用此方法进行比较:

getOuterN() != that.getOuterN()