【发布时间】:2019-02-05 14:07:19
【问题描述】:
我有Javaenum:
public enum ConflictResolutionStrategy {
softResolve,
hardResolve,
}
我想叫它ConflictResolutionStrategy.hardResolve.apply(case1, case2)。
case1 和 case2 都是同一类型的对象。 apply 在我的情况下应该什么都不返回。
这个设计背后的基本思想。创建Strategy 设计模式并根据设置的enum 值解决冲突。
我在 StackOveflow 上找不到任何类似的问题,即使简单的搜索给了我大量类似的案例,这些案例并不能直接解决我的案例。
我尝试了以下方法:
public enum ConflictResolutionStrategy {
softResolve ((CaseType case1, CaseType case2) -> case1.update(case2)),
hardResolve,
}
以上版本无法编译。
我尝试了另一种解决方案:
public enum ConflictResolutionStrategy {
softResolve,
hardResolve {
public void apply(CaseType case1, CaseType case2) {
case1.update(case2);
}
},
}
第二种解决方案,工作正常,但需要太多代码。
【问题讨论】:
-
很明显
softResolve和hardResolve实际上以不同的方式解决,所以你必须覆盖apply让他们以不同的方式处理......所以“太多的代码”会是必需的,是的 -
@Eugene 因为
softResolve和hardResolve是不同的值,应该区别对待。我确实理解在这两种情况下都应该使用不同的代码。我的问题的重点是否可以以lambda-like 的方式编写,与上一个代码示例中的工作方式相同?我想使用现代Java功能减少代码购买的噪音。
标签: java lambda enums java-8 functional-interface