如何在多次调用 Class 时保持字段的相同值
How to keep the same value of a field for multiple calls to a Class
我 运行 遇到了一个我基本上无法解决的问题,我正在尝试为房子构建代码,并且我想多次拨打房子而无需打开每次点亮
我的字段值
private boolean turnon = false;
然后是我的开灯方法
public void turnon() {
turnon = true;
}
基本上我想避免的是每次我想添加一个新房子时都不要调用该方法,基本上一旦我打开它它就会为 class.[=15 的每个实例打开=]
House x = new House();
x.turnon();
假设我创建了另一个 class House
House y = new House();
我希望在 y 中打开灯,因为我已经在 x 中打开它们
我尝试静态定义该方法,但没有用,如有任何建议,我们将不胜感激
在你的房子 class 中,添加:
public House() {
turnon();
}
每当您创建新房子时,您都可以在构造函数中初始化字段 turnOn 的值(注意驼峰式约定)。
public House(boolean turnOn) {
// initializing other fields
this.turnOn = turnOn;
}
然后您可以提供常规 getter 和 setter 来访问 turnOn 字段。
创建其他房屋时,您可以简单地使用无参数构造函数。
public House() {
// initializing other fields
}
这里混淆的根本原因是:
'House' 和一盏灯 'Switch' 不属于同一个 class!
所以我认为您应该将 House 和 Switch 建模为不同的 classes。
并且只需将房子对象 'aggregate' 设为一组 'Switches' 和房子中的其他对象。
例如:
class House {
List<ElectricalFitting> devices;
}
class Switch extends ElectricalFitting {
...
}
您可以将光源的默认状态作为静态场提取到基础中 class。
你的房子 class 扩展了这个基础 class,继承了默认状态字段并在其构造函数中将默认值复制到实例状态。这两个设置器同时更改默认状态和实例状态。
例如,如果默认状态是关灯 (false),则每个新的 House 实例都会关灯。
但是,如果您打开一所房子的灯 (true),则默认值会更改为 true,并且每个新实例都会打开灯。
House 的每个现有实例在打开或关闭灯时独立于所有其他房屋。
public abstract class HouseBase {
protectet static boolean defaultSwitchState = false;
}
public class House extends HouseBase {
private boolean turnOn = false;
public House() {
turnOn = defaultSwitchState;
}
public void turnOn() {
super.defaultSwitchState = true;
turnOn = true;
}
public void turnOff() {
super.defaultSwitchState = false;
turnOn = false;
}
}
我 运行 遇到了一个我基本上无法解决的问题,我正在尝试为房子构建代码,并且我想多次拨打房子而无需打开每次点亮
我的字段值
private boolean turnon = false;
然后是我的开灯方法
public void turnon() {
turnon = true;
}
基本上我想避免的是每次我想添加一个新房子时都不要调用该方法,基本上一旦我打开它它就会为 class.[=15 的每个实例打开=]
House x = new House();
x.turnon();
假设我创建了另一个 class House
House y = new House();
我希望在 y 中打开灯,因为我已经在 x 中打开它们
我尝试静态定义该方法,但没有用,如有任何建议,我们将不胜感激
在你的房子 class 中,添加:
public House() {
turnon();
}
每当您创建新房子时,您都可以在构造函数中初始化字段 turnOn 的值(注意驼峰式约定)。
public House(boolean turnOn) {
// initializing other fields
this.turnOn = turnOn;
}
然后您可以提供常规 getter 和 setter 来访问 turnOn 字段。 创建其他房屋时,您可以简单地使用无参数构造函数。
public House() {
// initializing other fields
}
这里混淆的根本原因是: 'House' 和一盏灯 'Switch' 不属于同一个 class!
所以我认为您应该将 House 和 Switch 建模为不同的 classes。 并且只需将房子对象 'aggregate' 设为一组 'Switches' 和房子中的其他对象。
例如:
class House {
List<ElectricalFitting> devices;
}
class Switch extends ElectricalFitting {
...
}
您可以将光源的默认状态作为静态场提取到基础中 class。 你的房子 class 扩展了这个基础 class,继承了默认状态字段并在其构造函数中将默认值复制到实例状态。这两个设置器同时更改默认状态和实例状态。
例如,如果默认状态是关灯 (false),则每个新的 House 实例都会关灯。
但是,如果您打开一所房子的灯 (true),则默认值会更改为 true,并且每个新实例都会打开灯。
House 的每个现有实例在打开或关闭灯时独立于所有其他房屋。
public abstract class HouseBase {
protectet static boolean defaultSwitchState = false;
}
public class House extends HouseBase {
private boolean turnOn = false;
public House() {
turnOn = defaultSwitchState;
}
public void turnOn() {
super.defaultSwitchState = true;
turnOn = true;
}
public void turnOff() {
super.defaultSwitchState = false;
turnOn = false;
}
}