我有一些代码需要重构。我有许多方法需要传入多个相同类型的参数,例如:
public void foo(String name, String street, boolean b1, boolean b2) { ... }
等等。因为不同的对象只能通过名称来区分,我希望将它们包装在对象(枚举)中,以便我可以利用语言的类型系统(在这种情况下是Java)。
public class Name {
private String value;
public String getValue() { return value; }
// ...
}
这样我可以强制调用代码传递特定类型的对象。这将确保不会意外混淆方法参数的顺序,从而在运行时不会产生意外行为:
foo(new Name("John"), new Street("Broadway"), new B1(true), new B2(false);
这使得重构更加安全,只要您想,就可以在系统中一直使用对象,其中的数据,即字符串,始终是安全的。只有在需要时,通过调用getValue()才能获取它。
现在,对于包装字符串的对象,很容易理解,因为实例可能处于许多状态中。
但是布尔类型的包装器怎么办?它们只有TRUE或FALSE两种状态。实现看起来有点奇怪:
public enum Quanto {
YES() {
protected boolean isQuanto() {
return true;
}
},
NO() {
protected boolean isQuanto() {
return false;
}
};
protected abstract boolean isQuanto();
}
更奇怪的是我发现调用代码看起来像这样:
public void doStuff(Quanto quanto) {
if(quanto.isQuanto()) {
// ...
}
}
从技术上讲当然没有关系,但感觉不太对劲...您有没有发现“更好”的处理方式?
编辑:让我不满的是,在上面的例子中,可能会有比YES和NO更多的值,比如MAYBE...?!
谢谢!