【问题标题】:Cannot convert from Function<Short, Object> to Function<Short, Short>无法从 Function<Short, Object> 转换为 Function<Short, Short>
【发布时间】:2021-01-31 23:05:45
【问题描述】:

所以,这个大学练习要求编写一个方法,将Function&lt;Short, Short&gt; 作为参数,结果类型为Function&lt;Short, Short&gt;。它应该返回函数除以 9 的结果。 这是我编写的代码,虽然我非常有信心它应该可以工作,但 eclipse 在第 16 行显示了一个我根本无法理解的错误:

"Type mismatch: cannot convert from Function<Short,Object> to Function<Short,Short>. 

如果我将Function&lt;Integer, Integer&gt; 放在两者中,或者如果我在返回类型中写入Function&lt;Short, Object&gt; 并将参数保留为 Function,则效果很好。

public Function<Short, Short> ulmic(Function<Short, Short> period) {
   return period.andThen(a -> a / 9);
}

【问题讨论】:

    标签: java eclipse function java-8 short


    【解决方案1】:

    为了让它工作,你必须写如下:

    public Function<Short, Short> ulmic(Function<Short, Short> period) {
        return period.andThen(a -> (short) (a / 9));
    }
    

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

    来自Chapter 5. Conversions and Promotions 可以阅读:

    一个转换上下文是数字运算符的操作数,例如 + 或者 *。这种操作数的转换过程称为数字 晋升。促销的特殊之处在于,在二进制的情况下 运算符,为一个操作数选择的转换可能部分取决于 另一个操作数表达式的类型。

    5.6.2. Binary Numeric Promotion

    当一个运算符将二进制数字提升应用于一对 操作数,每个操作数必须表示一个可转换为 数字类型,按顺序适用以下规则:

    如果任何操作数是引用类型,则对其进行拆箱 转换 (§5.1.8)。

    加宽原始转换 (§5.1.2) 用于转换或 两个操作数均由以下规则指定:

    • 如果任一操作数是 double 类型,则另一个将转换为 double。

    • 否则,如果任一操作数为浮点类型,则转换另一个 浮动。

    • 否则,如果任一操作数是 long 类型,则转换另一个 长。

    • 否则,两个操作数都转换为 int 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多