Java 为什么我会在“中”中得到强制转换异常;对于每一个“;而不是在;为了“什么?”;?
我希望以下代码中的两个FOR的行为方式相同,但它们没有:Java 为什么我会在“中”中得到强制转换异常;对于每一个“;而不是在;为了“什么?”;?,java,for-loop,foreach,casting,Java,For Loop,Foreach,Casting,我希望以下代码中的两个FOR的行为方式相同,但它们没有: ArgumentCaptor<Appender> argumentCaptor = ArgumentCaptor.forClass(Appender.class); Mockito.verify(mockedAppender, times(3)).doAppend(argumentCaptor.capture()); for(int i = 0; i< argumentCaptor.getAllValues().siz
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());
}
ArgumentCaptor ArgumentCaptor=ArgumentCaptor.forClass(Appender.class);
验证(mockedAppender,times(3)).doAppend(argumentCaptor.capture());
对于(int i=0;i
第一个正确打印消息,而第二个异常:
java.lang.ClassCastException:ch.qos.logback.classic.spi.LoggingEvent
无法强制转换为ch.qos.logback.core.Appender
问题不在于打印功能内部的强制转换 我认为问题在于:
for(Appender appender : argumentCaptor.getAllValues()) { ...
换成
for(LoggingEvent loggingEvent : argumentCaptor.getAllValues()) {
System.out.println(loggingEvent.getMessage());
}
您无法将某些内容强制转换到
Appender
,因此我猜foreach循环头中的类型是错误的尝试(LoggingEvent Appender:argumentCaptor.getAllValues())
我相信argumentCaptor.getAllValues()返回的对象。get(I)可以强制转换为Appender和LoggingEvent,但Appender不能强制转换为LoggingEvent我认为ArgumentCaptor ArgumentCaptor
在这里是错误的。您实际上捕获了LoggingEvent
s,因此它应该是ArgumentCaptor
.Hm,它甚至可以编译吗?