不知何故,我无法在流中使用 instanceof
检查。测试时出现的问题:
ArgumentCaptor<MyClass> arg = ArgumentCaptor.forClass(MyClass.class);
verify(modelService).save(arg.capture());
使用不同参数(不同类的实例)调用方法 save
三次,并且 arg.getAllValues()
返回 SomeOtherClassObject1,SomeOtherClassObject2,MyClassObject
流波纹管抛出异常“SomeOtherClass 无法转换为 MyClass”
MyClass argument = arg.getAllValues().stream()
.filter(v -> v instanceof MyClass)
.findFirst()
.get()
但是如果我使用 foreach 一切正常:
MyClass argument = null;
for(Object o : arg.getAllValues()) {
if(o instanceof MyClass) {
argument = (MyClass) o;
break;
}
}
最佳答案
问题中显示的 for every 循环示例在instanceof 检查后包含显式强制转换。以下内容与该循环等效:
MyClass argument =
arg.getAllValues()
.stream() // Stream<SomeOtherClass>
.filter(v -> v instanceof MyClass) // Stream<SomeOtherClass>
.map(MyClass.class::cast) // Stream<MyClass>
.findFirst() // Optional<MyClass>
.orElse(null); // MyClass
关于Java流类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131776/