簡體   English   中英

Java中的Getter / Setter問題?

[英]Getter/Setter Problem in Java?

我想在兩個類之間傳遞String值,它們都是同一包。 所以我創建了類似於代碼的類:

public class Map_Delegate {
String myLatitude;
String myLongitude;
String myName;
private String TAG = "Map_Delegate";

public String getMyName() {

    return this.myName;
}

public void setMyName(String value) {
    Log.v(TAG, value);
    this.myName = value;
}

public String getMyLatitude() {

    return this.myLatitude;
}

public void setMyLatitude(String value) {
    Log.v(TAG, value);
    this.myLatitude = value;
}

public String getMyLongitude() {

    return this.myLongitude;
}

public void setMyLongitude(String value) {
    Log.v(TAG, value);
    this.myLongitude = value;
}
}

但是它不能傳遞值。 我喜歡這樣的代碼來設置值:

Map_Delegate map = new Map_Delegate();
map.setMyName(first_name_temp + " " + last_name_temp);
map.setMyLatitude(homeLatitude_temp);
map.setMyLongitude(homeLongitude_temp);

獲取值的代碼:

   Map_Delegate map = new Map_Delegate();
   name_val = getMyName();
   lat_val = getMyLatitude();
   long_val = getMyLongitude();

為什么您可以猜到Null值? 所有類都在同一個包中並與public .AnyIdea?

好了,您可以在一個Map_Delegate實例上設置值。 稍后, 您將創建一個新的空白實例並檢索其值。 當然,它們為空。 您需要引用之前填充的同一對象,而不是創建新對象。

我不確定我是否完全了解您在做什么,但是從您寫的內容來看,您似乎每次都在創建一個新的Map_Delegate。 因此,您創建一個對象並設置值,然后創建另一個對象並嘗試獲取值(但是通過創建一個新對象,值將初始化為null)。 您應該在第一次創建的對象上調用get,這需要持有對該對象的引用並將其傳遞到需要的任何地方。

或者,您可能正在嘗試實現Singleton設計模式。 使用Singleton設計模式意味着給定類將永遠只有一個實例,因此您不需要傳遞引用,只需再次調用getInstance即可獲取該引用。 基本上要為您的案例實現單例,您可以執行以下操作:

public class Map_Delegate {
    private static Map_Delegate instance;

    private Map_Delegate() {
         // Private constructor so nobody can create an instance of your class.
    }

    public static Map_Delegate getInstance() {
        if (instance == null) {
            instance = new Map_Delegate();
        }
        return instance;
    }

    // All the rest of your code can go here.
}

現在您可以執行以下操作:

Map_Delegate a = Map_Delegate.getInstance();
a.setMyName("Name");
// Whatever else.

然后,您可以執行以下操作:

Map_Delegate b = Map_Delegate.getInstance();
String name = b.getMyName();

並且名稱不會為空,因為您使用的是之前的相同實例。

您正在創建兩個map_delegate實例的空值的原因。 一個新的實例的屬性具有空值(除非您指定默認值-此處不是這種情況。)您在第一個實例上設置了值,然后從第二個實例檢索-第二個實例是使用空值重新構造的。

我會避免使用單例模式。 相反,請確保您的代碼將同一實例傳遞給需要它們的部分。 考慮您想對map_delegate做些什么,然后添加一種方法來傳遞適當的委托-通常作為屬性或構造函數傳遞給協作者。

Map_Delegate map = new Map_Delegate();
map.setMyName(first_name_temp + " " + last_name_temp);
map.setMyLatitude(homeLatitude_temp);
map.setMyLongitude(homeLongitude_temp);

String name_val;
String lat_val;
String long_val;

name_val = map.getMyName();//<-Not Null
lat_val  = map.getMyLatitude();//<-Not Null
long_val = map.getMyLongitude();//<-Not Null

map = new new Map_Delegate();//Another memory area is newly generated. 
name_val = map.getMyName();//<- Null
lat_val  = map.getMyLatitude();//<- Null
long_val = map.getMyLongitude();//<- Null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM