Java中是否有一种方法可以让编译器处理互斥选项?

Mik*_*.K. 2 java methods types class

我想知道是否有一种方法来声明一个接受String和Enum的方法,但是如果使用某个枚举则只需要使用该字符串.

例:

public enum SearchType {
    REGEX,DEFAULT
}
public static List<File> Search(String path, SearchType search, String pattern) {
    //do things
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,只有程序员指定他们是否使用了特定的模式字符串字段SearchType.REGEX,如果您忘记了它,或者将其包含在a中SearchType.DEAFULT,您的程序将无法编译.

如果它们正在使用SearchType DEFAULT,程序员必须传入一个空字符串,并且代码必须使用几个if语句来检查互斥选项.现在,如果你包含一个带有DEFAULT的模式或忘记REGEX上的模式,我会抛出一个IllegalArgumentException,因为这两个事情都表明使用这个函数的人可能犯了一个错误.

我的问题是:

  • 是否可以使用Java 8进行这种编译时参数检查?

  • 有没有更惯用/安全/逻辑的方式来处理这种情况?

这听起来好像它可以通过某种接口来处理,如果它甚至可以完成的话.

谢谢!

Hap*_*ppy 5

您应该声明两个方法:一个方法被调用来做一个工作,而不是两个.所以在这里,您可以声明:

public static List<File> search(String path);
Run Code Online (Sandbox Code Playgroud)

public static List<File> search(String path, String pattern);
Run Code Online (Sandbox Code Playgroud)

SearchType在这种情况下,你的枚举是无用的.请记住将javadoc添加到您的方法中,用户不会感到困惑.