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的优雅.
还有其他选择还是这基本上是你必须选择的两种口味?
猜猜你撞墙了.我没有看到任何其他选择.Java很冗长,这是事实.在这种情况下,我通常会添加一个局部变量来使代码更具可读性.你可以这样做,
EnumSet<Style> styles = EnumSet.of(Style.Bold, Style.ITALIC);
printText("hello", styles);
Run Code Online (Sandbox Code Playgroud)