我想知道是否有一种方法可以声明一个接受字符串和枚举的方法,但仅在使用某个枚举时才需要使用字符串。
示例:
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 中是否可行?
是否有更惯用/安全/合乎逻辑的方法来处理这种情况?
这听起来像是可以通过某种接口(interface)来处理(如果可以的话)。
谢谢!
最佳答案
您应该声明两种方法:调用一种方法来完成一项工作,而不是两种。所以在这里,你可以声明:
public static List<File> search(String path);
和
public static List<File> search(String path, String pattern);
在这种情况下,您的枚举SearchType
毫无用处。请记住将 javadoc 添加到您的方法中,这样用户就不会感到困惑。
关于java - Java 有没有办法让编译器处理互斥的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880066/