【发布时间】:2021-07-04 22:05:03
【问题描述】:
我正在学习 lambda,然后是 WebClient 类 所以我正在创建 WebClient 的 bean
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder().build();
exchangeStrategies.messageWriters()
.stream()
.filter(LoggingCodecSupport.class::isInstance)
.forEach(writer -> ((LoggingCodecSupport)writer).setEnableLoggingRequestDetails(true));
我认为顶部代码和底部代码是相同的
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder().build();
exchangeStrategies.messageWriters()
.stream()
.filter(new Predicate<HttpMessageWriter>() {
public boolean test(HttpMessageWriter t) {
return LoggingCodecSupport.class.isInstance(t);
};
})
.forEach(new Consumer<HttpMessageWriter>() {
public void accept(HttpMessageWriter t) {
((LoggingCodecSupport)t).setEnableLoggingRequestDetails(true);
};
});
我不明白这种转换情况,因为 HttpMessageWriter 是接口 和 LoggingCodecSupport 是类但 LoggingCodecSupport 没有实现 HttpMessageWriter,所以我认为 HttpMessageWriter 不能转换为 LoggingCodecSupport
.forEach(new Consumer<HttpMessageWriter>() {
public void accept(HttpMessageWriter t) {
((LoggingCodecSupport)t).setEnableLoggingRequestDetails(true);
};
});
这是HttpMessageWriter的代码
public interface HttpMessageWriter<T> {
....
}
这是LoggingCodecSupport的代码
public class LoggingCodecSupport {
....
}
我试图测试这种情况,但它会导致 java.lang.ClassCastException
public class Test4 {
public static void main(String[] args) {
Parent parent = new Parent() {};
((Child)parent).foo();
}
}
class Child{
public void foo() {
System.out.println("foo");
}
}
interface Parent{
}
帮助我理解这件事
并制作此代码,但它也会产生 java.lang.ClassCastException
public class Test4 {
public static void main(String[] args) {
Parent parent = new Parent() {};
((Child)parent).foo();
}
}
class Child{
public void foo() {
System.out.println("foo");
}
}
interface Parent{
}
class bar extends Child implements Parent{
}
【问题讨论】:
-
Dude - 你需要一些真正实现你的界面的类(例如“Child”)!此外,除非 Parent 实际上 IS 是孩子,否则您不能将“Parent”转换为“Child”。两个“是”关系可能是“父子类子类”或“父实现子类”。我怀疑你可能想要相反的......
-
谢谢你的commnets 我理解你的内容,但我不明白这段代码 public void accept(HttpMessageWriter t) { ((LoggingCodecSupport)t).setEnableLoggingRequestDetails(true); };
标签: java spring-boot http casting