很多布尔标志输入到类

Kap*_*psh 3 java refactoring

我有一个对话框,根据应用程序的状态,当前用户的安全性等显示各种内容.我正在传递几个布尔标志,然后根据这些标志启用和/或隐藏UI组件.Eg:

new MyDialog(showOptionsTable, allowFooInput, allowBarInput, isSuperUser) 
Run Code Online (Sandbox Code Playgroud)

最初这开始是一些标志,这很好.但是现在随着需求的变化,它已经演变为五个布尔标志的输入.

处理这种行为的最佳做法是什么?这是否应该根据对话框的外观进行子类化?

小智 10

和许多事情一样,"这取决于".

  1. Ben Noland建议用一个类来保存配置选项.这是可行的,但有利于不变性,并可选择使用构建器模式.因为布尔值是内置类型,所以编写一个小型构建器将真正帮助人们理解代码.如果你将它与MyDialog(真实,真实,......)进行比较,你就知道我的意思了:

    Options.allowThis().allowThat()建()

  2. 克里斯建议使用比特字段,但正如一些评论者指出的那样,由于Josh Bloch的Effective Java中列出的许多原因,比特字段是邪恶的.基本上他们很难调试和容易出错(你可以传入任何int,它仍然会编译).因此,如果你走这条路线,使用真实的枚举和EnumSet.

  3. 如果你可以合理地子类化(或组合),意味着你通常只使用所有布尔值的几个组合,那么就这样做.


Chr*_*nce 8

一旦你得到两个或三个以上的标志,我会考虑创建一个类来存储这些设置,以保持你的设计清洁.