将Java引用转换为将值返回到返回`void`的方法

时间:2018-02-07 04:45:08

标签: java casting method-reference

JLS转换规则在这一点上看起来非常错综复杂:对一个方法的引用是否正确,这个引用将一些值返回给接受相同参数类型但返回void的引用?我认为没关系,因为void比任何类型都要窄。

例如......

import java.util.function.Consumer;

public class MethodRefCaster {

  /** Operation accepting and returning Integer. */
  Integer fooOp(Integer x) {
    System.out.println(x);
    return x + 3;
  }

  /** Applier of given op accepting Integer, returning void. */
  void applyOpToBar(Consumer<Integer> op, int bar) {
    op.accept(bar);
  }

  public static void main(String [] args) {
    MethodRefCaster x = new MethodRefCaster();

    // Cast the method ref to make it fit.
    x.applyOpToBar((Consumer<Integer>) x::fooOp, 42);
  }
}

如您所料,打印42。但它是正确的Java吗?非常感谢。

0 个答案:

没有答案