gpt4 book ai didi

java - 枚举上的基本方法调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:34:13 24 4
gpt4 key购买 nike

我正在学习 Java 枚举,我想知道检查多个枚举的匹配值以调用特定方法的最佳方法是什么。我在下面定义了两个单独的枚举,getValue 方法的 colName 参数使用它们来确定要执行的方法。所以枚举驱动方法调用。必须有一种比我下面的方法更有效的方法来做到这一点。有什么建议么?

我想避免执行以下操作(伪代码):

 if(colName.equalsIgnoreCase("ATTRIBUTEONE") || 
colName.equalsIgnoreCase("ATTRIBUTETWO") ||
colName.equalsIgnoreCase("ATTRIBUTETWO")){
callAsStringMethod();
} else if(colName.equalsIgnoreCase("ATTRIBUTEFOUR")){
callAsIntegerMethod();
}

我使用枚举的尝试:

 public class RowHelper implements IRowHelper
public static enum StringAttributes {
ATTRIBUTEONE,
ATTRIBUTETWO,
ATTRIBUTETHREE;
}

public static enum IntegerAttributes {
ATTRIBUTEFOUR,
ATTRIBUTEFIVE,
ATTRIBUTESIX,
ATTRIBUTESEVEN;
}
@Override
public String getValue(String colName) throws Exception{
boolean colFound=false;
Object retValue = null;
for (EConstants.StringAttributes attribute : EConstants.StringAttributes.values()) {
if(colName.toUpperCase().equals(attribute)){
retValue = callAsStringMethod();
colFound=true;
}
}
for (EConstants.IntegerAttributes attribute : EConstants.IntegerAttributes.values()) {
if(colName.toUpperCase().equals(attribute)){
retValue = callAsIntegerMethod();
colFound=true;
}
}
if(!colFound)
throw new Exception("column not found");

if(retValue instanceof String )
return (String) retValue;
else
return retValue.toString();
}
}

最佳答案

试试这个:

public String getValue(String colName) throws Exception {

final String name = colName != null ? colName.trim().toUpperCase() : "";

try {
EConstants.StringAttributes.valueOf(name);
return callAsStringMethod().toString();
} catch (Exception e1) {
try {
EConstants.IntegerAttributes.valueOf(name);
return callAsIntegerMethod().toString();
} catch (Exception e2) {
throw new Exception("column not found");
}
}

}

根据问题的最新编辑,该方法现在返回适当的值。

编辑:

根据 Kirk Woll 和 Louis Wasserman 的基准测试,循环访问 values 比执行 try/catch 快得多。所以这是原始代码的简化版本,希望它更快一点:

public String getValue(String colName) throws Exception {

final String name = colName != null ? colName.trim().toUpperCase() : "";

for (EConstants.StringAttributes attribute : EConstants.StringAttributes.values())
if (name.equals(attribute))
return callAsStringMethod().toString();

for (EConstants.IntegerAttributes attribute : EConstants.IntegerAttributes.values())
if (name.equals(attribute))
return callAsIntegerMethod().toString();

throw new Exception("column not found");

}

关于java - 枚举上的基本方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10034009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com