首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Function<Short、Object>转换为Function<Short、Short>

无法从Function<Short、Object>转换为Function<Short、Short>
EN

Stack Overflow用户
提问于 2021-01-31 23:05:45
回答 1查看 114关注 0票数 0

因此,这个大学练习要求编写一个方法,该方法以Function<Short, Short>作为参数,结果类型为Function<Short, Short>。它应该返回函数除以9的结果。这是我编写的代码,虽然我很有信心它应该能工作,但eclipse在第16行显示了一个我根本不明白的错误:

代码语言:javascript
复制
"Type mismatch: cannot convert from Function<Short,Object> to Function<Short,Short>. 

如果将Function<Integer, Integer>放在两种类型中,或者在返回类型中写入Function<Short, Object>,并将参数保留为Function,则工作正常。

代码语言:javascript
复制
public Function<Short, Short> ulmic(Function<Short, Short> period) {
   return period.andThen(a -> a / 9);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-31 23:13:24

为了使它发挥作用,您必须按以下方式编写:

代码语言:javascript
复制
public Function<Short, Short> ulmic(Function<Short, Short> period) {
    return period.andThen(a -> (short) (a / 9));
}

当您在a9上应用操作数、a9时,Java会将结果转换为整数。

第5章.转换和晋升可以读到:

一个转换上下文是数值运算符(如+或* )的操作数。这类操作数的转换过程称为数值提升。升级是特殊的,在二进制运算符的情况下,为一个操作数选择的转换可能部分取决于另一个操作数表达式的类型。

5.6.2. Binary Numeric Promotion

当运算符将二进制数值提升应用于一对操作数(每个操作数必须表示可转换为数字类型的值)时,将应用下列规则: 如果任何操作数是引用类型的,则受取消装箱转换(第5.1.8条)的限制。 根据下列规则,应用拓宽原语转换(第5.1.2节)来转换任意一个操作数或两个操作数:

  • 如果其中一个操作数为double类型,则另一个操作数转换为double。
  • 否则,如果任一操作数类型为float,则将另一个操作数转换为float。
  • 否则,如果任一操作数类型为long,则另一个将转换为long。
  • 否则,两个操作数都转换为int类型。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65985181

复制
相关文章

相似问题

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