作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有枚举类,其值假设会随着时间增长,我希望添加新枚举值的用户也能在某处提供实现。但我不确定如何强制他们提供实现,因为实现将在其他类(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/
我是一名优秀的程序员,十分优秀!