gpt4 book ai didi

Java - 创建功能接口(interface)时出错

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:02 25 4
gpt4 key购买 nike

我的 java 代码中有以下测试类:

 Function<? super Either<? extends Object, ? extends Object>, ? super Either<? extends Object, ? extends Object>> test = new Function<Either<Integer, Integer>, Either<Integer, Integer>>() {
@Override
public Either<Integer, Integer> apply(Either<Integer, Integer> integers) {
return integers;
}
}

Either 的文档可以在这里找到:http://static.javadoc.io/io.javaslang/javaslang/2.0.2/javaslang/control/Either.html .

但是我收到以下编译错误(Java 8)

Error:(77, 129) java: incompatible types: 
<anonymous java.util.function.Function<javaslang.control.Either<java.lang.Integer,java.lang.Integer>,javaslang.control.Either<java.lang.Integer,java.lang.Integer>>>
cannot be converted to
java.util.function.Function<? super javaslang.control.Either<? extends java.lang.Object,? extends java.lang.Object>,? super javaslang.control.Either<? extends java.lang.Object,? extends java.lang.Object>>

我是 Java 新手,不确定这里出了什么问题。任何帮助深表感谢。

我知道这段代码没有意义,这不是我真正使用它的方式。我实际上正在尝试将函数传递给内部库。但我不应该收到“Either 无法转换为”的编译错误? super 要么

谢谢!!

最佳答案

它不起作用的原因是 ? super Either<? extends Object, ? extends Object> (相当于 ? super Either<?, ?> )必须能够接受任何类型的 Either 。例如,以下内容必须编译

Either<Long, Long> either = ...
test.apply(either);

Either<Long, Long>Either<?, ?> 的子类。但您的实现只能处理特定的子类型: Either<Integer, Integer> .

这是同一问题的更简单的演示:

Lis<? super Number> numbers = new ArrayList<Integer>();

这不会编译,因为列表必须是可以接受any的类型 Number ,不仅仅是 Integer .

适合您的情况的理想解决方案取决于您到底想要做什么,这从问题中并不完全清楚。我能得到的最接近你的尝试是这样的:

Function<? super Either<Integer, Integer>, ? extends Either<?, ?>> test = ...

注意 super 的使用在第一个参数和extends中在第二个参数中。这遵循 Producer extends , Consumer super 的原则.

关于Java - 创建功能接口(interface)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339940/

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