【发布时间】:2018-10-04 09:06:53
【问题描述】:
我希望以下代码中的两个 fors 的行为方式相同,但事实并非如此:
ArgumentCaptor<Appender> argumentCaptor = ArgumentCaptor.forClass(Appender.class);
Mockito.verify(mockedAppender, times(3)).doAppend(argumentCaptor.capture());
for(int i = 0; i< argumentCaptor.getAllValues().size(); ++i) {
System.out.println(((LoggingEvent) argumentCaptor.getAllValues().get(i)).getMessage());
}
for(Appender appender : argumentCaptor.getAllValues()) {
System.out.println(((LoggingEvent) appender).getMessage());
}
第一个正确打印消息,而第二个给我这个异常:
java.lang.ClassCastException: ch.qos.logback.classic.spi.LoggingEvent 不能强制转换为 ch.qos.logback.core.Appender
【问题讨论】:
-
你没有把东西投进
Appender,所以我猜foreach循环头中的类型是错误的 -
试试
for (LoggingEvent appender : argumentCaptor.getAllValues()) -
我相信 argumentCaptor.getAllValues().get(i) 返回的对象可以同时转换为 Appender 和 LoggingEvent 但 Appender 不能转换为 LoggingEvent
-
我认为
ArgumentCaptor<Appender> argumentCaptor在这里是错误的。你实际上捕获了LoggingEvents,所以它应该是ArgumentCaptor<LoggingEvent>。 -
嗯,它还能编译吗?
标签: java for-loop foreach casting