假设我创建了一个枚举,例如下面的:
public enum MyEnum {
A,
B,
C;
}
Run Code Online (Sandbox Code Playgroud)
并且有一个 switch 语句(如下所示),其中每个枚举值都有一个 case 语句,但我还添加了一个默认值来抛出 IllegalArgumentException。(如果添加了一个新的枚举值,那么如果新值被传递,那么有人更有可能会注意到该 case 语句出了问题。我的想法是异常比日志或尝试处理新值更引人注目案件。)
switch(myEnum) {
case A:
//do something
break;
case B:
//do something
break;
case C:
//do something
break;
default:
throw new IllegalArgumentException("Unrecognized enum type!");
}
Run Code Online (Sandbox Code Playgroud)
除非我遗漏了某些东西,否则从理论上讲,如果不添加新的枚举值或更改 switch 语句,默认值应该是无法访问的。
所以我想知道的是,如果我正在编写代码覆盖率的 JUnit 测试,是否有办法强制切换到默认语句而不更新应用程序代码?
说我有一节课foo:
class foo {
String someString;
List<String> someList;
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个列表foo,有没有办法让我创建一个新的列表/数组/什么是foo基本上someString和someList值重新映射?例如:
arr1: [
foo {
someString: 'test1',
someList: ['a', 'b']
},
foo {
someString: 'test2',
someList: ['b', 'c']
}
]
Run Code Online (Sandbox Code Playgroud)
会成为
arr2: [
foo {
someString: 'a',
someList: ['test1']
},
foo {
someString: 'b',
someList: ['test1', 'test2']
},
foo {
someString: 'c',
someList: ['test2']
},
]
Run Code Online (Sandbox Code Playgroud)
现在,我有一个嵌套循环,它迭代someList每个foo的每个元素,并将它们编译成一个映射,其中键是someList值,值是一组someString来自foos的someList值,其中存在值.然后执行条目集的映射,将其转换为新的foos,其中键和值作为构造函数参数传递.
Map<String, Set<String>> myMap;
for(foo f : …Run Code Online (Sandbox Code Playgroud)