【问题标题】:Making two options in class constructor在类构造函数中创建两个选项
【发布时间】:2019-11-20 14:17:09
【问题描述】:
abstract class TV extends Electronics{
    private double diagonal;
    private String signal;
    private int channel;

    public TV() {}

    public TV(LocalDate productionDate, String name, int counterOnOff, boolean isOn, double diagonal, String signal, int channel) {
        super(productionDate, name, counterOnOff, isOn);
        this.diagonal= diagonal;
        this.signal= ????;
        this.channel= channel;
    }
}

???? 是我需要插入两个值的位置(不完全存在,我只需要在创建对象时从两个选项中进行选择)- 模拟和数字。我不知道如何在构造函数中实现两个选项。

我试图将private String signal 设为一个数组,但它要求(应该)两个数组值,我需要从两个选项中进行选择。这个类也会有setter和getter。

【问题讨论】:

  • 我猜signal 应该是两个选项之一,而不是两者。您可能正在那里寻找enum

标签: java constructor options


【解决方案1】:

因为你正在学习:

定义和使用枚举

public enum Signal {
    ANALOG,
    DIGITAL,
    INVALID    
}

然后改变

private String signal;

private Signal signal;

还有构造函数:

public TV(... boolean isOn, double diagonal, Signal signal, int channel) {

请记住,对于可以是常量并且属于一个公共“组”的变量,枚举是一个不错的选择...

【讨论】:

  • 不过,我最终会将NewEnum 更改为Signal
【解决方案2】:

上面的答案更具可读性(我也更喜欢使用枚举),但您也可以使用布尔值。

替换private String signal;
private boolean isDigital;

并在您的构造函数中将其更改为
public TV([...]double diagonal, boolean isDigital, int channel) {

编辑: 与枚举相比的优势在于它可以直接在if 语句中使用,例如
if(isDigital)
您不必像
if(signal == Signal.DIGITAL)

那样编写相等检查

作为建议:我不建议使用String 来存储状态。在您的情况下,状态将是模拟/数字。您需要确保始终使用相同的字符串(比较时字符串区分大小写)。您可以通过编写常量来帮助它,但您需要为每个状态设置一个常量。

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多