java - 在其 getter 中调用数据成员的 setter

标签 java

这个问题有点链接到另一个 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/

相关文章:

java - 使用 -server JVM 选项运行 tomcat

java - 如何从命令行运行这个 Maven 插件任务?

java - 在 jboss EAP 7 中创建 JMS 消息生成器时出错

java - 黑莓文件连接非法状态异常

java - apache-commons-dbutils 可以将 beans 转换为 SQL 语句吗?

java - 使用 Altbeacon 时 Android N 设备不断进入/退出区域的错误的解决方法

javax.net.ssl.SSLException - trustAnchors 参数必须非空

java - 解析 JSON 对象时 Gson 解析错误

java - Netbeans - 错误 : Could not find or load main class

java - 仍然无法访问本地主机 :5762 after starting RabbitMQ server