首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -创建函数接口时出错

Java -创建函数接口时出错
EN

Stack Overflow用户
提问于 2017-02-20 16:47:33
回答 1查看 415关注 0票数 1

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

代码语言:javascript
复制
 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;
        }
 }

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

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

代码语言:javascript
复制
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新手,不知道这里出了什么问题。任何帮助都是非常感谢的。

我知道这段代码没有意义,这也不是我真正使用它的方式。我实际上是在尝试将一个函数传递给一个内部库。但我不应该得到编译错误,其中任何一个都不能转换为?超级任一

谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2017-02-20 17:36:57

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

代码语言:javascript
复制
Either<Long, Long> either = ...
test.apply(either);

因为Either<Long, Long>Either<?, ?>的子类。但是您的实现只能处理一个特定子类型:Either<Integer, Integer>

下面是同一问题的一个更简单的演示:

代码语言:javascript
复制
Lis<? super Number> numbers = new ArrayList<Integer>();

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

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

代码语言:javascript
复制
Function<? super Either<Integer, Integer>, ? extends Either<?, ?>> test = ...

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42339940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档