【发布时间】:2015-07-04 23:32:24
【问题描述】:
我想知道是否有一种方法可以声明一个采用字符串和枚举的方法,但仅在使用某个枚举时才需要使用字符串。
例子:
public enum SearchType {
REGEX,DEFAULT
}
public static List<File> Search(String path, SearchType search, String pattern) {
//do things
}
理想情况下,模式字符串字段只需要程序员指定他们是否使用特定的SearchType.REGEX,如果你忘记了它,或者将它包含在SearchType.DEAFULT中,你的程序无法编译。
就目前而言,如果程序员使用SearchType DEFAULT,则必须传入一个空字符串,并且代码必须使用几个if 语句检查互斥选项。现在,如果您使用 DEFAULT 包含模式或忘记 REGEX 上的模式,我会抛出 IllegalArgumentException,因为这两件事都表明使用此函数的人可能犯了错误。
我的问题是:
这种编译时参数检查甚至可以在 Java 8 中实现吗?
是否有更惯用/安全/合乎逻辑的方式来处理这种情况?
这听起来像是由某种接口来处理,如果它甚至可以完成的话。
谢谢!
【问题讨论】: