在没有 setters/getters 的情况下切换其他 类 中的变量

Toggle variables in other classes without setters/getters

我目前有一个名为 UserSettings 的对象,其中包含许多用户偏好变量。

在另一个名为 playerLabels 的 class 中,我像这样实例化对象: public static UserSettings settings = new UserSettings();

在第三个 class 中,我从文件中读取并通过执行(例如)playerLabels.settings.setToggled(true);

来编辑设置对象

我在设置文件中有许多布尔值,我想切换其中一些(打开->关闭或关闭->打开)。 在我看来,可以通过三种方式做到这一点:

  1. playerLabels.settings.toggled = !playerLabels.settings.toggled;
  2. playerLabels.settings.setToggled(!playerLabels.settings.getToggled());
  3. settings 中为每个布尔值创建一个切换方法

我学会了将 setter 和 getter 与 java 一起使用,而不是直接访问变量,这就是我不想做第一个的原因。

第二个有点长而且感觉很笨拙,但是如果这样就可以了。

第三个为每个布尔值创建方法会很耗时。

我感觉我存储用户首选项的方法并不理想,因为我正在访问另一个不必要的 class (playerLabels) 来编辑设置。如果有更好的方法以我想要的方式存储变量,那将会很有帮助。

谢谢

用户设置:

public class UserSettings {
    private boolean toggled = true;
    private float height = 0f;
    private boolean shadow = true;
    private boolean personal = false;

    public boolean isToggled() {
        return toggled;
    }

    public void setToggled(boolean toggled) {
        this.toggled = toggled;
    }

    public float getHeight() {
        return height;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    public boolean isShadow() {
        return shadow;
    }

    public void setShadow(boolean shadow) {
        this.shadow = shadow;
    }

    public boolean isPersonal() {
        return personal;
    }

    public void setPersonal(boolean personal) {
        this.personal = personal;
    }

}

简而言之,您不能不在 class 中编写一个方法来保存私有变量。创建私有变量的全部意义在于限制访问,从而封装变量。如果要切换它,请编写一个使用 getters/settings 来切换它的方法。

如果你真的想偷懒,不为每个设置添加一个toggle()方法,你可以新建一个class:

public class ToggleOption {

    private boolean value;
    
    public ToggleOption() {}

    public ToggleOption(boolean initialValue) {
        this.value = initialValue;
    }
    
    get() {
        return value;
    }

    set(boolean value) {
        this.value = value;
    }

    toggle() {
        this.value = !value;
    }
}

在您的 UserSettings class 中,您然后使用这个新的 class 而不是布尔标志:

public class UserSettings {
    private ToggleOption toggled = new ToggleOption(true);
    private float height = 0f;
    private ToggleOption shadow = new ToggleOption(true);
    private ToggleOption personal = new ToggleOption();

    ...
}

要切换,您只需调用

playerLabels.settings.getToggled().toggle();