我有一个对象,并从中得到一些字段,我用switch语句创建了一个方法,这个想法是使它通用,只是通过参数调用此方法,但是现在我不确定。
选项是
private String getCode(Row row, String code) {
String result;
switch (code) {
case code1:
result = row.getString("constant1");
break;
case code2:
result = row.getString(constant2);
break;
case code3:
result = row.getString(constant3);
break;
case code4:
result = row.getString(constant4);
break;
default:
result = null;
}
return result;
}
或
private String getcode1(Row row){
return row.getString("constant1")
}
private String getcode1(Row row){
return row.getString("constant2")
}
private String getcode1(Row row){
return row.getString("constant3")
}
private String getcode1(Row row){
return row.getString("constant4")
}
我想用更好的方法,我有点困惑
答案 0 :(得分:3)
如果您输入的代码与常量不同,我将建议采用以下方法。创建一个Enum映射代码和常量。
public enum Mapping {
MAPPING_FIRST("code1", "constant1"),
MAPPING_SECOND("code2", "constant2");
private String code;
private String constant;
// constructor and getters
public static Mapping getMappingFromCode(String code){
return Arrays.stream(Mapping.values())
.filter(mapping -> mapping.getCode().equals(code))
.findFirst()
.orElse(null);
}
}
现在,创建一种从行访问值的方法。
private String getValue(Row row, String code) {
Mapping mapping = Mapping.getMappingFromCode(code);
if(mapping == null){
return null;
}
return row.getString(mapping.getConstant());
}
答案 1 :(得分:3)
答案都不是。
这里提供的是一个价值转换过程。 这是如何工作的?据我所知,您需要以key
-value
对的形式存储数据,其中key
必须是唯一的。这就是Java中HashMap
的定义。
此外,因为您使用的是Switch
,所以我假设您可以使用一些唯一的密钥来标识数据。每个code
的度量只有一个constant
。 但是我们如何将其应用于我的问题?好吧,我认为您从中提取了一个row
来收集了数据。现在,您想通过row
访问此codeValue
的值(简称为constant
),但是要获得此constant
,您需要一个{{1} }。像这样:code
好吧,我们将需要一个名为code->constant->codeValue
的{{1}},它将其键定义为HasMap()
并将值定义为constants
。现在,如果您知道每个codes
,就可以轻松获得它们。显然,如果得到constants
,也可以得到每个`行的constant
,如下所示:
code
答案 2 :(得分:1)
这个问题有点小,但我会尽力解释。对我来说,第二个选择是“不”。为什么?您正在制作必须通过一些if / else语句进行整理的方法,例如:
if (code.equals(code1))
someString = getcode1(row);
else if (code.equals(code2))
somestring = getcode2(row);
else if (code.equals(code3))
someString = getcode3(row);
else
someString = getcode4(row);
为什么不使用这个:
if (code.equals(code1))
someString = row.getString("content1");
else if (code.equals(code2))
somestring = row.getString("content2");
else if (code.equals(code3))
someString = row.getString("content3");
else
someString = row.getString("content4");
我可以看到第一个被使用,但是那里有替代方法。为我们提供包含整个类和方法的完整的最低要求代码,与使用这些代码段相比,我们可以为您提供更多帮助。
答案 3 :(得分:0)
创建用于枚举代码和常量的枚举。在该枚举中,创建一个通用方法,您可以在其中通过参数传递代码。
public enum MyEnum {
CODE1("constant1"), CODE2("constant2");
private String constant;
public String getConstant() {
return constant;
}
private MyEnum(String constant) {
this.constant = constant;
}
private static String getConstant(String code) {
return Arrays.stream(MyEnum.values()).filter(mapping -> mapping.name().equalsIgnoreCase(code))
.map(e -> e.getConstant()).findAny().orElse(null);
}
public static String getCode(Row row, String code) {
String constant = getConstant(code);
return constant != null ? row.get(constant) : null;
}
}
您可以通过调用通用方法 getCode()从行对象获取代码。
MyEnum.getCode(row, "code1")