2013-08-26 48 views
1

備註解決方案公共變量的Android/Java的

Soldier alpha; 
Soldier bravo; 

alpha = new Soldier(); //Create alpha 
alpha.age = 21; //Assign 21 to the variable alpha.age 

bravo = alpha //Assign alpha reference to bravo. bravo is now alpha not the copy. 
bravo.age = 42 //Assign 42 to the variable bravo.age. 

System.out.print("Alpha is" + alpha.age + "years old."); 

Alpha是42歲。

我有2個片段。我希望他們使用相同的變量。 這意味着如果一個片段更改變量,我不需要發送給另一個來獲取它。

我已經在C開發,爲此我只需要發送變量的內存地址。

在Java/Android中做這件事的最好方法是什麼?

在此先感謝:)

回答

2

使該變量成爲可由setter修改的對象。然後在片段中保留對該對象的引用。由於您的片段將指向相同的參考,因此對這兩個對象的任何更改都會被看到。

+0

對象引用的語法是他自己? 我的意思是當我寫功能(對象)。我已發送該對象的參考?或者我需要類似於C ^^ – nsvir

+0

@nsvir http://mobile.dzone.com/articles/android-tip-%E2%80%93-how-define之類的函數(&Object)來檢查這個小教程 – Droidman

+0

@ nsvir是的,在內部,Java通過值**傳遞對象引用**請參閱此文章以獲取更多詳細信息:http://www.javaworld.com/javaqa/2000-05/03-qa-0526-pass.html – dkatzel

0

dkatzel的解決方案將工作,但我個人懶惰的setter和getters。我這樣做的方式:我有一個Constants.java類,我存儲靜態變量(其中一些不是常量),我需要從應用程序訪問。工作正常。示例:

public static boolean isAboutShowing = false; 
public static final int TOAST_TYPE_OK = 0; 

順便說一下,要使用setter和getter訪問某些類字段,您需要該類的一個實例。這意味着還有1個Object存儲在內存中。這肯定不會很慢你的應用程序,但1更Object是1更Object :)

+3

關於從代碼管理的角度來看這很糟糕。如果你想要任何形式的封裝,你不希望這些封裝是公共或靜態的。 –

+0

@netinept,如果我不?例如,我打開設置活動並將靜態字段isSettings設置爲true。現在我可以檢查設置是否從我的應用程序的任何位置打開,而無需任何對象。 – Droidman

+0

這是多麼有趣的「意大利麪條」代碼誕生。 – Simon

0

只需創建一個私有靜態實例和訪問的get/set與兩個片段。

但是,如果您打算在多個線程中使用它,請仔細閱讀使用靜態變量的缺點。

0

正如@dkatzel所說,使用一個Object並通過setter對其進行修改。以下是對象類的示例:

public class News { 

private String title; 
private String content; 

public void setTitle(String tit) { 
    this.title = tit; 
} 

public void setContent(String cont) { 
    this.content = cont; 
} 

public String getTitle() { 
    return this.title; 
} 

public String getContent() { 
    return this.content; 
} 

}