在没有 setters/getters 的情况下切换其他 类 中的变量
Toggle variables in other classes without setters/getters
我目前有一个名为 UserSettings
的对象,其中包含许多用户偏好变量。
在另一个名为 playerLabels
的 class 中,我像这样实例化对象:
public static UserSettings settings = new UserSettings();
在第三个 class 中,我从文件中读取并通过执行(例如)playerLabels.settings.setToggled(true);
来编辑设置对象
我在设置文件中有许多布尔值,我想切换其中一些(打开->关闭或关闭->打开)。
在我看来,可以通过三种方式做到这一点:
playerLabels.settings.toggled = !playerLabels.settings.toggled;
playerLabels.settings.setToggled(!playerLabels.settings.getToggled());
- 在
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();
我目前有一个名为 UserSettings
的对象,其中包含许多用户偏好变量。
在另一个名为 playerLabels
的 class 中,我像这样实例化对象:
public static UserSettings settings = new UserSettings();
在第三个 class 中,我从文件中读取并通过执行(例如)playerLabels.settings.setToggled(true);
我在设置文件中有许多布尔值,我想切换其中一些(打开->关闭或关闭->打开)。 在我看来,可以通过三种方式做到这一点:
playerLabels.settings.toggled = !playerLabels.settings.toggled;
playerLabels.settings.setToggled(!playerLabels.settings.getToggled());
- 在
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();