当我尝试使用枚举存储:“=”,“>”,“<”等时,我有:
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;
}
}
当我尝试比较字符串以查看它是否包含“=”符号时,如何使用它,我应该这样做:
if (dataValue.contains(DataValueModifier.EQUAL.getValue())) {
...
}
我明白使用枚举是更好的做法,但这看起来很傻...... 谢谢,
大卫
答案 0 :(得分:4)
如果您在枚举中定义了方法boolean containedIn(String str)
并导入了您感兴趣的枚举值(在本例中为EQUAL),则使用情况如下:
if (EQUAL.containedIn(dataValue)) {
...
}
答案 1 :(得分:2)
我喜欢在这些情况下使用static import。
package mypackage;
public enum DataValueModifier
{
//your enum code
}
...然后
import static mypackage.DataValueModifier.*;
public MyClass
{
// code blah blah blah
public void doIt()
{
// more code blah blah
if (dataValue.contains(EQUAL.getValue()))
{
//...
}
}
}
它更好一点。
答案 2 :(得分:2)
首先,我通过定义isModifier方法将“contains”方法(或其等价方法)移动到枚举本身。
public static enum DataValueModifier {
...
public boolean isModifier( String modifierString )
{
return modifierString != null && value.equals(modifierString);
}
}
然后,代码看起来像这样:
if (DataValueModifier.EQUAL.isModifier(dataValue))
{
//...
}
但是,更重要的是,为什么你首先使用dataValue而不是枚举?如果您正在获取命令行输入或解析字符串方程式,然后需要找出表达式,我想我明白了。但是如果你能控制代码,那么你应该从枚举开始,然后你就可以说
了if ( dataValueEnum == DataValueModifier.EQUAL ) {
{
//...
}
我还考虑在枚举中添加一个静态方法,将给定的字符串转换为正确的枚举值。它可能不是那么高效,但除非你真的关心效率,否则它会让你的代码变得更加清晰。所以将这个方法添加到你的枚举:
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.
}
}
isModifier
和toDataValueModifier
方法可能会为您的DataValueModifier枚举添加一些丑陋的代码,但所有其他代码看起来都很棒。你现在可以这样做:
DataValueModifier dataValueEnum = DataValueModifier.toDataValueModifier(dataValue);
if (dataValueEnum == DataValueModifier.EQUAL) {
...
}
甚至
switch( DataValueModifier.toDataValueModifier(dataValue) ) {
case EQUAL:
// ...
break;
case GREATER_THAN:
// ...
break;
case GREATER_EQUAL:
// ...
break;
// ... define all the cases you want
case UNKNOWN:
default:
// ...
}