2014-06-30 62 views
-1

我正在嘗試訪問內部類變量並且無法實現它。無法在Java中獲得適當的內部類變量值

public int foo { 

public int valueofX() { 
    abc a = new foo().new abc(); 
    return a.getX(); 
} 
private final class abc { 
    private int x =0; // this value is changed later in the code 

     public int getX() { 
     return x; //this always give me 0 
     } 
    } 
} 
+1

您可以發佈的[MCVE(http://stackoverflow.com/help/mcve),我們可以改爲運行的這個不完整的代碼? –

回答

0

您已將foo聲明爲int - 應該不是您的外部類嗎?

public class foo { 

public static void main(String[] args) { 
    foo f = new foo(); 
    int x = f.valueofX(); 
} 
public int valueofX() { 
    abc a = new abc(); 
    return a.getX(); 
} 

private final class abc { 
    private int x = 1; 

    public int getX() { 
     return x; 
    } 
} 

} 

x是1這裏...

你真要創建一個新的ABC()每次你打電話valueOfX() - 機會是你想ABC成爲富的領域:

public class foo { 

    private abc a = new abc(); 

    public static void main(String[] args) { 
     foo f = new foo(); 
     int x = f.valueofX(); 
    } 
    public int valueofX() { 

     return a.getX(); 
    } 

    private final class abc { 
     private int x = 1; 

     public int getX() { 
      return x; 
     } 
    } 

} 
0

這是你的代碼:

public int foo { 

public int valueofX() { 
    abc a = new abc(); //You create a new 'abc' element and store it in 'a' 
    return a.getX(); /*Here you access the method 'getX()' from 'a', and 'a' 
         contains and 'abc' object. It gives you back the value x, 
         and it's with this method you could modify x. 
        */ 
} 

    private final class abc { 
     private int x = 0; // this value is changed later in the code 

      public int getX() { 
       return x; //this always give me 0 
      }    /*CORRECTION: This will give you 'X', that initially 
          has the value of 0 */ 
    } 

}

要訪問'a'(abc類)的'x'變量,必須使用返回它的merthod。


如果您只想訪問'x'值,請按照我所寫的內容進行操作。

a.valueOfX(); //This will return X, you can store it, operate with it, use it. 
0

我想你想這個實現

public class OuterClass { 
    public int valueofX() { 
     abc a = new OuterClass().new abc(); 
     a.setX(1); 
     return a.getX(); 
    } 
    private final class abc { 
     private int x =0; // this value is changed later in the code 

     public int getX() { 
      return x; //this always give me 0 
     } 
     public void setX(int x) 
     { 
      this.x = x; 
     } 
    } 
    public static void main(String arr[]) 
    { 
     OuterClass x = new OuterClass(); 
     System.out.println(x.valueofX()); 
    } 
    }