作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常采用 Are booleans as method arguments unacceptable? 中建议的 Enum 参数并使用策略模式实现它。
但是,我现在有一个复杂的逻辑,由于没有非静态枚举和大量需要复制到枚举方法中和从方法中复制出来的变量,我无法进入枚举。如果我在代码中使用 switch 而不是策略模式,除了简单清晰之外,我似乎失去了所有好处。
对于这个特定的方法,只能有两种可能性,那么 boolean 参数是否更容易接受? (如果使用枚举,我们的编码标准要求我处理任何未知的枚举,这在这种情况下似乎是不必要的。)也许我可以将 boolean 值放入常量并使用常量调用方法?
编辑:
复杂的逻辑是专有代码,不过有点像
public void method(A a, B b, boolean replaceMe) {
// Create and prepare local variables c, d, e, f, g;
if (replaceMe) {
// doSomethingWith a, b, c, d, e and return e, f, g
} else {
// doSomethingElseWith a, b, c, d, e and return e, f, g
}
// Process e, f, g further
}
最佳答案
你可以再次使用策略模式
public interface DoSomethingWithA2GStrategy { // horrible name I know ;)
void doSomething(A2GParameterContainer params);
}
并为容器创建如下内容:
public class A2GParameterContainer {
TypeOfA a;
// ...
TypeOfG g;
//getters and setters
}
然后稍微修改一下你的方法,传入具体的策略
public void method(A a, B b, DoSomethingWithA2GStrategy strategy) {
// Create and prepare local variables c, d, e, f, g;
A2GParameterContainer params = new A2GParameterContainer();
params.setA(a);
// ...
params.setG(g);
strategy.doSomething(params);
// take e, f, g from the container
// Process e, f, g further
}
关于java - 替换不能使用枚举的 boolean 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446479/
我是一名优秀的程序员,十分优秀!