java - 如何在 Java 中提供枚举值的实现?

标签 java enums functional-interface

我有枚举类,其值假设会随着时间增长,我希望添加新枚举值的用户也能在某处提供实现。 但我不确定如何强制他们提供实现,因为实现将在其他类(class)中进行。 例如

public enum DayType {
    SUNDAY,
    MONDAY;
}

在类里面提到

class X{
DateType dateType;
..
}

并在其他一些类中使用

if (x.getDateType().equals(DayType.SUNDAY)) {
...
}else if(x.getDateType().equals(DayType.MONDAY)){
..
}

因此,如果有人添加 DateType,那么他也应该被迫在上面的 if-else 逻辑中添加实现。 如果可能的话,最好通过添加功能接口(interface)?

我不能在枚举类中强制实现,因为实现具有 spring 依赖性。

最佳答案

真正的答案是:不要这样做。

如果您有某种“类型”,并且您知道这种“类型”会随着时间的推移看到新的化身,需要不同的行为,那么答案就是使用抽象类和多态性。

使用 if/else 链或 switch 语句并不重要:你有这样的想法:

if (someObject.getSomething() == whatever) { then do this } else { that }

是不好的做法!

如果有的话,您应该在工厂中使用这样的 switch 语句来返回不同的子类实例,然后在这些对象上调用“通用”方法。

您当前的方法是 A) 外部化有关内部状态的知识和 B) 还以多种方式强制执行依赖关系。

这就是意大利面条代码的开始方式!最好退后一步,考虑更多的 OOP 方法来解决这个问题!

关于java - 如何在 Java 中提供枚举值的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54512779/

相关文章:

java - 为什么两个方法引用被编译成两个不同的地址?

java - myClass$1.class 类的 Java 类文件有什么意义?

c++ - 有没有一种好的方法来确保特定的switch语句处理所有枚举值?

c# - 如何使用 EF 5 存储枚举列表

java - java中没有任何参数的注释是什么意思?

lambda - 如何在 Java 8 中传递带有参数的 lambda 表达式作为参数?

java - 如何在@query符号中添加查询条件,这可能吗?

java - 如何从字符串中提取和分离 double 值?

java - Spring HandlerInterceptor 不捕获 GET、POST 以外的方法

c# - 在 IronPython 中比较枚举值