Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会在“中”中得到强制转换异常;对于每一个“;而不是在;为了“什么?”;?_Java_For Loop_Foreach_Casting - Fatal编程技术网

Java 为什么我会在“中”中得到强制转换异常;对于每一个“;而不是在;为了“什么?”;?

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

我希望以下代码中的两个FOR的行为方式相同,但它们没有:

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,它甚至可以编译吗?