[英]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.