我有这个用于存储连接凭证的对象:
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 :(得分:4)
Singleton的重点在于它存储了Object的静态实例,因此可以在多个类之间重用。显然,如果每次拨打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()
,以便更准确地传达其目的。
请记住, 能够将对象作为参数传递给构造函数/方法,因此不需要单例模式。
答案 1 :(得分:0)
使用此行
NewAgentObj ob = NewAgentObj.newInstance();
您只获得具有所有空值的NewAgentObject的新实例。
因此,您将获得null。
而不是你必须使用单例模式来确保只有一个实例,它保存所有值。