gpt4 book ai didi

java - 为什么 Java 说这些类型不兼容?

转载 作者:行者123 更新时间:2023-11-30 06:13:40 28 4
gpt4 key购买 nike

这是我的代码:

private BiFunction<B,
BiFunction<B, ? extends Object, B>,
Function<? extends Object, B>>
applyPartial = (b, m) -> (v) -> m.apply(b, v);

Java 说:

File.java:[92,141] incompatible types: java.lang.Object cannot be converted to capture#1 of ? extends java.lang.Object

第 141 列是 m.apply(b, v) 中的 v

为什么不能编译?

最佳答案

在这种情况下,您必须命名您想要的类型来代替通配符捕获。 Java 无法确保两个捕获转换是等效的。

由于您不能在函数调用上创建泛型类型,因此您应该创建一个工厂函数来创建函数:

// Provided B is supplied as a class type
public <C> BiFunction<B, BiFunction<B, C, B>, Function<C, B>> createCurrier() {
return (b, m) -> v -> m.apply(b, v);
}
// B is an explicit type parameter
public <B, C> BiFunction<B, BiFunction<B, C, B>, Function<C, B>> createCurrier() {
return (b, m) -> v -> m.apply(b, v);
}

关于java - 为什么 Java 说这些类型不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com