2017-05-04 75 views
1

我有2個類,A和B. A包含我想在B中使用的屬性。如何從類中的方法訪問對象?

我想在B初始化時將所有初始化爲B的對象插入數組中。使用這段代碼,第一個對象應該轉到數組位置1,第二個對象轉到數組位置2,依此類推。變量n基本上決定了對象應該到哪個位置。

我知道用「this」。我可以從這個對象中訪問各個變量(就像你可以看到的,用x和y),但是我不知道我怎樣才能訪問整個對象。你看到我在我的代碼中有一條評論,它顯示了我試圖做的事情。它不起作用,因爲它不是正確的語法。

我該如何放置它才能使用?

class A{ 
     private int x, y; 
     private static int n; 
     A(int x, int y){ 
       this.x = x; 
       this.y = y; 
       n++; 
       //B.object[n] = this.object; 
       //I tried this but it doesn't work 
     }; 
} 

class B{ 
     public static A[] object = new A[10]; 
     public static void main(){ 
       A object1 = new A(1,2); 
       A object2 = new A(3,4); 
       A object3 = new A(5,6); 
     }; 
} 
+1

這就是'this'關鍵字出現的位置,但您沒有可以聯繫的實例,因爲您正在使用靜態方法。 – Stultuske

+0

'object'沒有在類'A'中定義,因此編譯器錯誤。 –

+0

使用'B.object [n] = this;' –

回答

1

object參考內部B類持有A類型的陣列,所以就需要簡單地設置B.object[n] = this;如下所示(這裏,this本身表示當前A對象,所以沒有必要說this.object) :

class A{ 
    private int x, y; 
    private static int n; 
    A(int x, int y){ 
     this.x = x; 
     this.y = y; 
     n++; 
     B.object[n] = this; 
    }; 
} 



class B{ 
     public static A[] object = new A[10]; 
     public static void main(String[] args){ 
       A object1 = new A(1,2); 
       A object2 = new A(3,4); 
       A object3 = new A(5,6); 
     }; 
} 

而且,在Java中,main方法需要String[]作爲輸入參數(如上所示),這將是該方法由JVM在開始時執行(儘管main(),代碼編譯,但JVM不會在啓動時調用它)。


但作爲一個側面說明,請記住,你正在嘗試做創建循環依賴(A類取決於B類,然後B類依賴於A類),所以避免這種情況。

0

儘管javaguy的解決方案解決了您的問題,但它可能會導致編譯器在構造函數中發出「泄漏這個」的警告。

這可能在多線程環境中具有潛在危險,因爲它允許您在A完全通過其構造函數之前獲取對A的引用(通過B.object)。

在這種情況下,更好的模式可能是在A中有一個靜態幫助器方法,它爲您構建這些對象,將它們添加到列表中,然後返回對它們的引用。

class A{ 
    private static int n; 

    private int x, y; 

    public static A createA(int x, int y){ 
     A result = new A(x, y); 
     n++; 
     B.object[n] = result; 
     return result; 
    } 

    private A(int x, int y){ 
     this.x = x; 
     this.y = y; 
    } 
} 



class B{ 
     public static A[] object = new A[10]; 
     public static void main(String[] args){ 
       A object1 = createA(1,2); 
       A object2 = createA(3,4); 
       A object3 = createA(5,6); 
     } 
} 

通過使私人的構造,可以確保new A(1,2)不會從另一個類工作,所以你必須使用的輔助方法來獲得一個實例。

+0

javaguy實際上很好地解決了我的問題。我只知道這一點。「我可以訪問對象變量,但沒有意識到」this「是對象本身,我之前並不知道,也測試過javaguys代碼,它完全符合我的需求。 – Rismosch

相關問題