从作为构造函数的参数给出的lambda调用实例方法

时间:2018-07-20 02:09:29

标签: java lambda constructor

我有一个FooTryFoo的班级

import java.util.function.Consumer;

public class Foo {

  Consumer<Integer> c;

  public Foo(Consumer<Integer> e) {
       this.c = c;
  }

  void bar(){}

}


class TryFoo{

   public static void main(String... args){

      Foo e = new Foo((someInt)-> /*how do i reference bar?*/ );

   } 
}

如何从lambda调用方法Foo#bar()?我尝试使用this.bar()Foo.this.bar(),但无济于事。设置器是另一种方法,但是最好使用构造器。

编辑1:Foo#bar不是静态的。

2 个答案:

答案 0 :(得分:0)

您不能不将bar设为静态:

  static void bar() {}

并通过以下方式调用它:

  Foo e = new Foo((someInt)-> Foo.bar());

否则,没有实例对象就无法调用实例方法。

答案 1 :(得分:0)

您可以使用BiConsumer

public class Foo {
  BiConsumer<Foo, Integer> c;

  public Foo(BiConsumer<Foo, Integer> c) {
       this.c = c;
  }

  void bar(){}

  public void useConsumer(int i) {
    c.accept(this, i);
  }
}


class TryFoo {
   public static void main(String... args) {
      Foo e = new Foo((foo, someInt)-> {
        // Do something with someInt
        foo.bar();
      });
   } 
}