试试这个:
switch (someString.toUpperCase()) {
case "XYZ":
myNum = 1;
break;
case "FOO":
myNum = 2;
break;
case "BAR":
case "ANOTHER_BAR":
myNum = 3;
break;
default:
myNum = -1;
break;
}
编辑:如果两者都意味着相同的结果,则仅添加了一个示例。使用新的 Switch 特性(JDK 14、15、16),您甚至可以简化 Switch 语句!链接:https://openjdk.java.net/jeps/361
,
首先,您可以将前两个 if
语句替换为一个:
if (someString.equalsIgnorecase("foo") || someString.equalsIgnorecase("bar")) {
x = someObj.setRequestNumber(123);
} else if (someString.equalsIgnorecase("xyz")) {
x = someObj.setRequestNumber(456);
} else {
x = someObj.setRequestNumber(000);
}
另一种方法是创建一个 Map
,并从地图中查找结果:
Map<String,Integer> map = Map.of("foo",123,"bar","xyz",456);
x = map.getOrDefault(someString.toLowerCase(),0);
(注意:Map.of(...)
是在 Java 9 中添加的,如果您使用的是早期版本的 Java,则必须使用 map.put("foo",123);
等单独添加元素)。
,
注意:代码已更新,在询问连接到特定键的值时添加了 toLowerCase
。顺便说一下,一个键应该是唯一标识的,OP 应该决定是对键使用小写还是大写,而不是更改代码进行忽略大小写比较。
您可以创建一个 Map<String,Integer>
并使用它来设置您的值(此解决方案也适用于旧版本的 java,最终对于 java 5 之前的版本不使用泛型):
// Init the map with the values for each key
Map<String,Integer> values = new HashMap<>();
values.put("foo",123);
values.put("bar",123);
values.put("xyz",456);
// Use the values map to set your value
someObject.setRequestNumber(value.getOrDefault(someString.toLowerCase(),0));
如果值映射中不存在任何键,则使用 getOrDefault
方法设置默认值:
返回指定键映射到的值,如果此映射不包含键的映射,则返回 defaultValue。
请注意,如果您需要将值 000 指定为默认值,则这不是 n int
。它必须设置为 String
以保存所有三个零。将其更改为字符串很简单,只需将代码更改如下:
// Init the map with the values for each key
Map<String,String> values = new HashMap<>();
values.put("foo","123");
values.put("bar","123");
values.put("xyz","456");
// Use the values map to set your value
// The method setRequestNumber must receive a String
someObject.setRequestNumber(value.getOrDefault(someString,"000"));
作为使用 switch 的替代方法,最好的方法是创建一个如下所示的方法(自 Java 7 起):
public String getValueFromKey(String key) {
switch(key.toLowerCase()) {
case "foo":
case "bar": // You can combine multiple case
return "123"; // You can exit directly with a return instead
// of saving the result in a variable and use a break
case "xyz":
return "456";
default: // Use the default to set the handle any value not previously handled
return "000";
}
...
someObj.setRequestNumber(getValueFromKey(someString));
,
使用地图。
初始化:
Map<String,Integer> map = new HashMap<>();
map.put("foo",123);
map.put("bar",123);
map.put("xyz",456);
:
使用:
Integer req = map.get(someString.toLowerCase());
if (req != null)
someObj.setRequestNumber(req);
else
error("....!");
这在其他地方为了简单起见而牺牲了一些初始化代码,如果您必须进行“许多”这样的查找并有“许多”字符串要查找,这是值得的。
,
您可以使用地图
Map<String,Integer> map = new HashMap<>();
map.put("foo",123);
map.put("bar",123);
map.put("xyz",456);
x= map.get(someString);
当面临很多情况时,看看是否可以应用多态。
https://refactoring.com/catalog/replaceConditionalWithPolymorphism.html
本文链接:https://www.f2er.com/10111.html