这个问题有点链接到另一个 question我在这个论坛问过。
这就是我想要完成的。我有以下类(class):
public class LoginPage
{
// Class Data
private HtmlForm loginForm;
// Calling the constructor of the parent class
public LoginPage()
{
loginForm = null;
}
public void setLoginForm()
{
...... logic to find the login form ........
}
public HtmlForm getLoginForm()
{
return loginForm;
}
...... other login related methods ........
}
我想确保每次调用 getLoginForm() 方法时它都不应返回 null。 一种方法是确保在调用 getLoginForm() 方法之前调用 setLoginForm()打电话。
我可以在其 getter 方法中调用数据成员的 setter 吗? 在这种情况下:
public HtmlForm getLoginForm()
{
setLoginForm()
return loginForm;
}
我从来没有见过这样的事情被实践过。 这有效吗?这样做的优缺点是什么?
感谢您的意见/建议!!!!
最佳答案
通常的模式是这样的:
public class LoginPage {
// Class Data
private HtmlForm loginForm;
// Calling the constructor of the parent class
public LoginPage() {
loginForm = null;
}
// Normal setter - NB: Private - so I am in complete control.
private void setLoginForm(HtmlForm loginForm) {
this.loginForm = loginForm;
}
private void initialiseLoginForm() {
if ( loginForm == null ) {
// Build a loginForm and use the private setter to set it.
// NB: In a multi-threaded environment you would normally use some kind of synchronization.
HtmlForm newForm;
// ...
setLoginForm(newForm);
}
}
// Normal getter
public HtmlForm getLoginForm() {
initialiseLoginForm();
return loginForm;
}
}
这会延迟创建表单并禁止用户修改它。请注意,我为 setter 使用了正确的签名,通常是 setXxx(T it)
。
关于java - 在其 getter 中调用数据成员的 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25998403/