2009-11-21 4 views
4

Учитывая следующий код:Доступ атрибута внешнего класса из экземпляра внутреннего класса

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"); 
//... 

Что я могу поменять с моим псевдо-код линией, так что я могу сравнить значения п для двух случаев Внутреннего класса?

Попытка очевидное решение (n != that.n) не компилируется:

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

я вижу .... (МНВ) – miku

ответ

7

Как и с методами и переменными экземпляра, внутренний класс связан с экземпляром его класса ограждающей и имеет прямой доступ к этому методы и поля объекта. - Java OO

Вы можете написать геттер во внутреннем классе, который возвращает n внешнего класса.

Способ по Inner:

public int getOuterN() { return n; } 

Затем сравните с помощью этого метода:

getOuterN() != that.getOuterN() 
+0

'n' является публичным атрибутом Наружно, а не доступный как атрибут 'that'. Попытка этого дает ошибку «не могу найти символ» – rampion

+0

да, конечно. добавил альтернативу, используя методы. – miku

+0

кто-то скопировал мой первый ответ;) - делает n! = that.n работает в конце концов? – miku

Смежные вопросы