如何解决无法从 Function<Short, Object> 转换为 Function<Short, Short>
因此,这个大学练习要求编写一个方法,将 Function<Short,Short>
作为参数,结果类型为 Function<Short,Short>
。它应该返回函数除以 9 的结果。
这是我写的代码,虽然我非常有信心它应该可以工作,但 eclipse 在第 16 行显示了一个我根本不明白的错误:
"Type mismatch: cannot convert from Function<Short,Object> to Function<Short,Short>.
如果我把 Function<Integer,Integer>
放在两者中,或者如果我在返回类型上写 Function<Short,Object>
,并且将参数保留为 Function
public Function<Short,Short> ulmic(Function<Short,Short> period) {
return period.andThen(a -> a / 9);
}
解决方法
为了让它工作,你必须写如下:
public Function<Short,Short> ulmic(Function<Short,Short> period) {
return period.andThen(a -> (short) (a / 9));
}
当您将操作数 /
应用于 a
和 9
时,Java 会将结果转换为整数。
从 Chapter 5. Conversions and Promotions 可以读到:
一个转换上下文是数字运算符的操作数,例如 + 要么 *。此类操作数的转换过程称为数字 晋升。促销的特殊之处在于,在二进制的情况下 运算符,为一个操作数选择的转换可能部分取决于 另一个操作数表达式的类型。
和5.6.2. Binary Numeric Promotion
当运算符将二进制数字提升应用于一对 操作数,每个操作数必须表示一个可转换为 数字类型,以下规则依次适用:
如果任何操作数是引用类型,则对其进行拆箱 转化 (§5.1.8)。
扩展原语转换 (§5.1.2) 用于转换或 由以下规则指定的两个操作数:
-
如果任一操作数的类型为 double,则另一个将转换为 double。
-
否则,如果任一操作数是 float 类型,则转换另一个 漂浮。
-
否则,如果任一操作数是 long 类型,则转换另一个 很长。
-
否则,两个操作数都将转换为 int 类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。