我需要创建一个具有一些预定义值的枚举或类,并且必须有一个选项来计算其他值.假设我们有这个枚举:
enum Duration {
ONE_HOUR("1${DurationUnits.DURATION_SUFFIX_HOUR}"),
ONE_DAY("24${DurationUnits.DURATION_SUFFIX_HOUR}"),
ONE_WEEK("7${DurationUnits.DURATION_SUFFIX_DAY}"),
ONE_MONTH("30${DurationUnits.DURATION_SUFFIX_DAY}")
String duration
Environment(String duration) {
this.duration = duration
}
static String custom(Date startTime, Date endTime) {
// TODO Calculate difference in days between the two dates
}
private static class DurationUnits {
public static final String DURATION_SUFFIX_HOUR = "h"
public static final String DURATION_SUFFIX_DAY = "d"
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我是否可以定义一个枚举值,比如CUSTOM代表所有非预定义值的值.也就是说,该custom(Date a, Date b)方法的通用值.我无法弄清楚如何去做,实际上我认为它甚至不可能.
作为替代方案,我正在考虑创建一个类而不是枚举,如下所示:
class Duration {
private static final String DURATION_SUFFIX_HOUR = "h"
private static final String DURATION_SUFFIX_DAY = "d"
/** Predefined values */
static final String ONE_HOUR = "1${DURATION_SUFFIX_HOUR}"
static final String ONE_DAY = "24${DURATION_SUFFIX_HOUR}"
static final String ONE_WEEK = "7${DURATION_SUFFIX_DAY}"
static final String ONE_MONTH = "30${DURATION_SUFFIX_DAY}"
static String custom(Date startDate, Date endDate) {
// TODO Calculate difference in days between the two dates
}
}
Run Code Online (Sandbox Code Playgroud)
您认为最好的方法是什么?此持续时间将是调用REST Web服务的方法的输入参数,这就是我尝试将其定义为枚举而不是仅传递字符串的原因.
您可以使用String append.
ONE_HOUR("1" + DurationUnits.DURATION_SUFFIX_HOUR),
ONE_DAY("24" + DurationUnits.DURATION_SUFFIX_HOUR),
ONE_WEEK("7" + DurationUnits.DURATION_SUFFIX_DAY),
ONE_MONTH("30" + DurationUnits.DURATION_SUFFIX_DAY);
Run Code Online (Sandbox Code Playgroud)
但是,使用TimeUnits可能更好
ONE_HOUR(1, TimeUnit.HOUR),
ONE_DAY(1, TimeUnit.DAY),
ONE_WEEK(7, TimeUnit.DAY),
ONE_MONTH(30, TimeUnit.DAY);
Run Code Online (Sandbox Code Playgroud)
注意:并非所有月份都有30天.
您还可以使用持续时间一段时间.
Duration ONE_HOUR = Duration.ofHours(1);
Duration ONE_DAY = Duration.ofDays(1);
Run Code Online (Sandbox Code Playgroud)
这将允许您根据需要创建更多持续时间.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |