在我的聊天应用程序中,我有一个枚举:
enum ContactRelationType {
Friend,
Familiar,
Ignored,
Unknown,
Guild,
Officers,
Academy,
Community,
System
}
Run Code Online (Sandbox Code Playgroud)
ContactRelationType值的一半是房间(公会,官员,学院,社区,系统).我需要知道的是价值空间与否.
我知道三种方法:
首先:
enum ContactRelationType {
Friend,
Familiar,
Ignored,
Unknown,
Guild,
Officers,
Academy,
Community,
System;
public boolean isRoom() {
return this == Guild ||
this == Officers ||
this == Academy ||
this == Community ||
this == System;
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来很难看,IDEA告诉我"过于复杂的布尔表达式",它就是.
第二:
enum ContactRelationType {
Friend,
Familiar,
Ignored,
Unknown,
Guild,
Officers,
Academy,
Community,
System;
public boolean isRoom() {
switch (this) {
case Guild:
case Officers:
case Academy:
case Community:
case System:
return true;
default:
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来也很难看.
第三:
public enum ContactRelationType {
Friend(false),
Familiar(false),
Ignored(false),
Unknown(false),
Guild(true),
Officers(true),
Academy(true),
Community(true),
System(true);
private boolean room;
ContactRelationType(boolean room) {
this.room = room;
}
public boolean isRoom() {
return room;
}
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我有boolean room
所有枚举实例.
那么,什么解决方案更好,为什么?
您使用布尔标志的解决方案是好的.只需添加一个默认构造函数:
ContactRelationType() {
this(false);
}
Run Code Online (Sandbox Code Playgroud)
现在你不必写true
或false
为每个枚举成员; 仅适用于那些不是"默认"的:
public enum ContactRelationType {
Friend,
Familiar,
Ignored,
Unknown,
Guild(true),
Officers(true),
Academy(true),
Community(true),
System(true);
Run Code Online (Sandbox Code Playgroud)