Java中的Getter / Setter问题?

时间:2010-06-17 10:57:17

标签: 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?

4 个答案:

答案 0 :(得分:5)

好吧,您可以在Map_Delegate的一个实例上设置值。稍后您创建一个新的空白实例并检索其值。当然他们是空的。您需要引用之前填充的同一个对象,而不是创建一个新对象。

答案 1 :(得分:3)

我不确定我完全理解你在做什么,但是从你写的内容看起来你每次都在创建一个新的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();

并且名称不会为null,因为您使用的是之前的相同实例。

答案 2 :(得分:0)

您正在创建两个map_delegate实例的空值的原因。新的instnace具有属性的空值(除非您指定默认值 - 这里不是这种情况。)您在第一个实例上设置值,但从第二个实例检索 - 第二个实例是新构造的,具有空值。

我会避免单身模式。相反,请确保您的代码将相同的实例传递给需要它们的部分。考虑你想用map_delegate做什么,然后添加一种传递适当委托的方法 - 通常作为属性或构造函数给协作者。

答案 3 :(得分:0)

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