在Java方法中使用标志的最佳实践

Roa*_*alt 8 java flags swt enumset

在Java方法中指定标志的最佳做法是什么?

我已经看到SWT使用int作为位域,如:

(部分来自"Effective Java,2nd Ed."第159页):

public class Text {
  public static final int STYLE_BOLD = 1 << 0; // 1
  public static final int STYLE_ITALIC = 1 << 1; // 2

  void printText(String text, int flags) {

  }
}
Run Code Online (Sandbox Code Playgroud)

你的客户电话看起来像:

printText("hello", Text.STYLE_BOLD | Text.STYLE_ITALIC);
Run Code Online (Sandbox Code Playgroud)

..但是这是不鼓励的,因为你可以将来自不同类的标志(int值)混合在一起,而无需任何编译器检查.

在同一本书("Effective Java")中,我看到了EnumSet的使用,但随后您的用户调用变为:

printText("hello", EnumSet.of(Style.Bold, Style.ITALIC));
Run Code Online (Sandbox Code Playgroud)

我发现这有点冗长,我更喜欢SWT的优雅.

还有其他选择还是这基本上是你必须选择的两种口味?

Ara*_*n R 7

猜猜你撞墙了.我没有看到任何其他选择.Java很冗长,这是事实.在这种情况下,我通常会添加一个局部变量来使代码更具可读性.你可以这样做,

EnumSet<Style> styles = EnumSet.of(Style.Bold, Style.ITALIC);
printText("hello", styles);
Run Code Online (Sandbox Code Playgroud)