2013-12-07 3 views
2

У меня есть этот объект, который будет использоваться для хранения учетных данных подключения:Получить значение из Java Object

public static class NewAgentObj 
    { 

     private String hostName; 
     private int port; 
     private String userName; 
     private String passwd; 

     public static NewAgentObj newInstance() 
     { 
      return new NewAgentObj(); 
     } 

     public NewAgentObj() 
     { 

     } 

     /** 
     * An easier way to set a new value or optional arguments are provided when create a new instance. Can be used as alternative to set method 
     * 
     * @param hostName 
     * @return 
     */ 
     public NewAgentObj hostName(String hostName) 
     { 
      this.hostName = hostName; 
      return this; 
     } 

     /** 
     * 
     * @param port 
     * @return 
     */ 
     public NewAgentObj port(int port) 
     { 
      this.port = port; 
      return this; 
     } 

     /** 
     * 
     * @param userName 
     * @return 
     */ 
     public NewAgentObj userName(String userName) 
     { 
      this.userName = userName; 
      return this; 
     } 

     /** 
     * 
     * @param passwd 
     * @return 
     */ 
     public NewAgentObj passwd(String passwd) 
     { 
      this.passwd = passwd; 
      return this; 
     } 

     public String getHostName() 
     { 
      return hostName; 
     } 

     public int getPort() 
     { 
      return port; 
     } 

     public String getUserName() 
     { 
      return userName; 
     } 

     public String getPasswd() 
     { 
      return passwd; 
     } 

    } 

Я использую этот код для вставки значений:

NewAgentObj ob = NewAgentObj.newInstance().hostName(filed.getText()); 

Но когда я пытаюсь получить данные в другой класс Java Я использую этот код:

NewAgentObj ob = NewAgentObj.newInstance(); 

     Label finalFieldAgentName = new Label(ob.getHostName()); 

Получаю пустое значение. Можете ли вы рассказать мне, как я могу получить ценность от объекта Java?

+0

'newInstance()' возвращает новый элемент NewAgentObj(); 'и вы не инициализировали поля экземпляра в конструкторе no-args, так что это нормально, что вы получили нуль. –

+0

@Peter Есть ли у вас какие-либо вопросы/отзывы об ответах? –

+0

Да, это работает. –

ответ

4

Весь смысл Singleton заключается в том, что он хранит статический экземпляр вашего объекта, поэтому он может быть повторно использован среди нескольких классов. Очевидно, что каждый раз, когда вы вызываете getInstance(), вы делаете объект new, вы никогда не сможете хранить данные; он отбрасывается почти сразу.

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

private static NewAgentObj instance; //your static, reusable instance 

public static NewAgentObj newInstance(){ 
    if (instance == null){ 
     instance = new NewAgentObj(); //only create the Object if it doesn't exist 
    } 
    return instance; 

}

Для ясности, я бы переименовать этот метод getInstance() более точно передать свое назначение.

Имейте в виду, что вы способны передавать объекты вокруг как аргументы конструкторам/методам, поэтому не нужен шаблон singleton.

0

С этой линией

NewAgentObj ob = NewAgentObj.newInstance(); 

вы получите только новый экземпляр NewAgentObject со всеми нулевыми значениями.
Из-за этого вы получаете null.

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

Смежные вопросы