因此,这个大学练习要求编写一个方法,该方法以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);
}发布于 2021-01-31 23:13:24
为了使它发挥作用,您必须按以下方式编写:
public Function<Short, Short> ulmic(Function<Short, Short> period) {
return period.andThen(a -> (short) (a / 9));
}当您在a和9上应用操作数、a和9时,Java会将结果转换为整数。
从第5章.转换和晋升可以读到:
一个转换上下文是数值运算符(如+或* )的操作数。这类操作数的转换过程称为数值提升。升级是特殊的,在二进制运算符的情况下,为一个操作数选择的转换可能部分取决于另一个操作数表达式的类型。
和5.6.2. Binary Numeric Promotion
当运算符将二进制数值提升应用于一对操作数(每个操作数必须表示可转换为数字类型的值)时,将应用下列规则: 如果任何操作数是引用类型的,则受取消装箱转换(第5.1.8条)的限制。 根据下列规则,应用拓宽原语转换(第5.1.2节)来转换任意一个操作数或两个操作数:
https://stackoverflow.com/questions/65985181
复制相似问题