当我尝试使用枚举来存储:"=",">","<"等,我有:
public static enum DataValueModifier {
EQUAL("="),
GREATER_THAN(">"),
GREATER_EUQAL(">="),
LESS_THAN("<"),
LESS_EQUAL("<="),
APPRROXIMATE("~"),
NOT_DETERMINED("ND");
private String value;
private DataValueModifier(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试比较字符串以查看它是否包含"="符号时,如何使用它,我应该这样做:
if (dataValue.contains(DataValueModifier.EQUAL.getValue())) {
...
}
Run Code Online (Sandbox Code Playgroud)
我明白使用枚举是更好的做法,但这看起来很傻......谢谢,
大卫
首先,我通过定义 isModifier 方法将“contains”方法(或等效方法)移至枚举本身。
public static enum DataValueModifier {
...
public boolean isModifier( String modifierString )
{
return modifierString != null && value.equals(modifierString);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的代码如下所示:
if (DataValueModifier.EQUAL.isModifier(dataValue))
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但是,更重要的是,为什么首先使用 dataValue 而不是枚举?如果您正在获取命令行输入或其他内容或解析字符串方程,然后需要找出我想我理解的表达式。但是,如果您可以控制代码,那么您应该从枚举开始,然后您就可以说
if ( dataValueEnum == DataValueModifier.EQUAL ) {
{
//...
}
Run Code Online (Sandbox Code Playgroud)
我还考虑向枚举添加一个静态方法,将给定的字符串转换为正确的枚举值。也许它的效率不太高,但除非您真的关心效率,否则它会让您的代码更加干净。因此,将此方法添加到您的枚举中:
public static DataValueModifier toDataValueModifier( String dataValue ) {
if( EQUAL.isModifier( dataValue ) {
return EQUAL;
} else if( GREATER_THAN.isModifier( dataValue ) {
return GREATER_THAN;
} else if...
// Do this for all possible values
} else {
return UNKNOWN;
// Also, add an UNKNOWN to your list of enum values.
}
}
Run Code Online (Sandbox Code Playgroud)
和isModifier方法toDataValueModifier可能会向您的 DataValueModifier 枚举添加一些难看的代码,但所有其他代码看起来都很棒。您现在可以执行以下操作:
DataValueModifier dataValueEnum = DataValueModifier.toDataValueModifier(dataValue);
if (dataValueEnum == DataValueModifier.EQUAL) {
...
}
Run Code Online (Sandbox Code Playgroud)
甚至
switch( DataValueModifier.toDataValueModifier(dataValue) ) {
case EQUAL:
// ...
break;
case GREATER_THAN:
// ...
break;
case GREATER_EQUAL:
// ...
break;
// ... define all the cases you want
case UNKNOWN:
default:
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |