【问题标题】:How to use enum in 2 classes and store Java specific types in properties file [duplicate]如何在 2 个类中使用枚举并将 Java 特定类型存储在属性文件中[重复]
【发布时间】:2018-09-27 19:30:55
【问题描述】:

我正在构建一个应用程序来安排每 60 分钟、30 分钟、15 分钟等一次提醒。用户选择提醒间隔(60分钟、30分钟等)

问题 1) 我的班级中有一个 switch 语句,用于检查提醒间隔的值。我已经在枚举中定义了值。

//Enum defined in a separate file, not inside the classes SetupSchedule,ExecuteSchedule 

public enum ValidInterval {
HOUR, HALFHOUR, QUARTERHOUR, TENMINUTE, FIVEMINUTE 
}

我需要在两个单独的类中使用这个枚举。

public class SetupSchedule {
public void setUpUserSchedule(String reminderInterval, boolean setSnoozeOff, boolean interruptIndicator) {
    switch(reminderInterval) {
        case HOUR :     someAction();
                        break;
        case HALFHOUR :someAction();
                         break;                     
        }
    }
}

public class ExecuteSchedule {
public void executeUserSchedule(String reminderInterval, boolean setSnoozeOff, boolean interruptIndicator) {
    switch(reminderInterval) {
        case HOUR :     someAction();
                        break;
        case HALFHOUR :someAction();
                         break;                     
        }
    }
}

用户请求的结构:

public class UserSchedule {
    @Id
    private String id;

    @EnumValidator(enumClazz = ValidInterval.class)
    @NotBlank
    private String frequencyType;

    @NotBlank
    private boolean allowSnooze;

    @NotBlank
    private boolean interruptInd;
}

我收到的错误:Eclipse 显示 HOUR, HALFHOUR 无法解析为变量的错误。

注意:这不是关于如何使用枚举的重复问题,因为枚举存储在单独的文件中;不在使用它的同一类中。我搜索了此问题的答案,但找不到。

请不要标记为重复。

【问题讨论】:

  • ValidInterval.HOUR。您需要使用完整的枚举名称在其类之外引用它。
  • 那不是有效的 Java。不能在课堂上直接使用switch 语句。必须在一个方法中。另外,reminderInterval 是什么?
  • @BakonJarser 除了在enum 上的switch 语句中,case 的值必须是不合格的。当然,它要求开关变量reminderInterval 实际上是ValidInterval 类型,但无论如何,对于枚举,case 值始终是不合格的。
  • @Andreas,reminderInterval 由用户设置。可以取值 HOUR、HALFHOUR、QUARTERHOUR、TENMINUTE、FIVEMINUTE
  • @user1478392 但是什么呢? String? ValidInterval? 编辑问题并将代码修正为有效的 Java,并包含说明或代码显示 reminderInterval 是什么类型。

标签: java enums properties switch-statement


【解决方案1】:

你需要写枚举的名字,然后是变量:

public class SetupSchedule {
    switch(reminderInterval) {
        case ValidInterval.HOUR:
            someAction();
            break;
        case ValidInterval.HALFHOUR:
            someAction();
            break;                     
    }
}

您还需要将此开关插入到您不能将其留在类中的方法中

【讨论】:

  • 如果reminderIntervalValidInterval,那么case 值必须是不合格的。如果没有,那么使用ValidInterval 进行排位赛将永远无法正常工作。
  • 您还需要在方法中插入此开关 - OP 的 switch-statement 已经在方法 executeUserSchedule 中。
  • @LuCio 当我发布这个答案时,它不像我在上面发布的那样
  • @Bonfra04 检查了问题的历史记录。你是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
相关资源
最近更新 更多