Проблема геттера / сеттера в Java? - PullRequest
0 голосов
/ 17 июня 2010

Я хочу передать значение 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? Все классы в одном пакете и общедоступны .AnyIdea?

Ответы [ 4 ]

5 голосов
/ 17 июня 2010

Ну, вы устанавливаете значения для одного экземпляра Map_Delegate.Позже вы создаете новый пустой экземпляр и извлекаете его значения.Конечно они нулевые.Вам нужна ссылка на тот же объект, который вы указали ранее, а не новый.

3 голосов
/ 17 июня 2010

Я не уверен, что полностью понимаю, что вы делаете, но из того, что вы написали, похоже, что вы каждый раз создаете новый Map_Delegate.Таким образом, вы создаете один объект и устанавливаете значения, затем вы создаете другой объект и пытаетесь получить значения (но при создании нового объекта значения инициализируются нулем).Вы должны вызывать 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();

и имя не будет нулевым, потому что вы используете тот же экземпляр из ранее.

0 голосов
/ 18 июня 2010
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
0 голосов
/ 17 июня 2010

Причиной создания нулевых значений двух экземпляров map_delegate. Новый экземпляр имеет нулевые значения для свойств (если вы не укажете значение по умолчанию, а не случай здесь). Вы устанавливаете значения в первом экземпляре, а затем извлекаете из второго - второй экземпляр заново создается с нулевыми значениями.

Я бы избегал одноэлементного паттерна. Вместо этого убедитесь, что ваш код передает один и тот же экземпляр нужным им частям. Подумайте, что вы хотите сделать с map_delegate, а затем добавьте способ передачи соответствующего делегата - обычно в качестве свойства или конструктора для соавтора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...