繁体   English   中英

如何为对 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 的每个实例打开。

House x = new House();
x.turnon(); 

所以假设我创建了另一个 class 的房子

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 
       
    }

这里混淆的根本原因是:“房子”和灯“开关”不属于同一类!

所以我觉得你应该把model House和一个Switch当作不同的类。 只需让房子 object “聚合”一组“开关”和房子里的其他对象。

例如:

class House {
  List<ElectricalFitting> devices;
}

class Switch extends ElectricalFitting {
...
}

您可以将默认的 state 作为 static 字段提取到基础 class 中。 你的房子 class 扩展了这个基础 class,继承了默认的 state 字段并在它的构造函数中复制默认值到实例 Z65639E2A693459 这两个设置器同时更改默认值和实例 state。

例如,如果默认 state 是关灯 (false),则每个新的 House 实例都会关灯。

但是如果你在一个房子里打开灯(真)而不是默认更改为真,并且每个新实例都打开灯。

每个现有的 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;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM