java - Java 有没有办法让编译器处理互斥的选项?

标签 java class methods types

我想知道是否有一种方法可以声明一个接受字符串和枚举的方法,但仅在使用某个枚举时才需要使用字符串。

示例:

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/

相关文章:

java - 将 WAR 部署到 Wildfly 14 时出现 commons-lang3 的 ClassNotFoundException

java - 用于计算类实例数量的字段

java - "x"上存在语法错误,此后应有 VariableDeclaratorld

android - 如何在 android 中解决此错误 "com.android.internal.telephony cannot be resolved to a type"

java - 将 system.out.println 中数组的值打印到屏幕计数器

java - Java 应用程序的数据库

Java:解析 JSON 文件

c++ - 用指向自定义类的指针填充数组。 C++

java - 打印我的递归阶乘结果

ios - 通过在方法名中使用变量来调用方法?