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

Java 从作为参数提供给构造函数的lambda调用实例方法,java,lambda,constructor,Java,Lambda,Constructor,我有一门课Foo和TryFoo 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
TryFoo

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?*/ );

   } 
}
import java.util.function.Consumer;
公开课Foo{
消费者c;
公共食物主任(消费者电子){
这个.c=c;
}
无效条(){}
}
TryFoo类{
公共静态void main(字符串…参数){
fooE=新的Foo((someInt)->/*如何使用参考条?*/);
} 
}
如何从lambda调用方法
Foo#bar()
?我尝试使用
this.bar()
Foo.this.bar()
,但没有效果。setter是另一种方法,但最好使用构造函数


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

如果不使
bar
static:

  static void bar() {}
并称之为:

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

否则,如果没有实例对象来调用实例方法,则无法调用该实例方法。

您可以使用
双消费者

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();
      });
   } 
}
公共类Foo{
双消费者c;
公共食品(双消费者c){
这个.c=c;
}
无效条(){}
公共消费者(int i){
c、 接受(这个,我);
}
}
TryFoo类{
公共静态void main(字符串…参数){
fooE=新的Foo((Foo,someInt)->{
//做点什么
foo.bar();
});
} 
}

您还没有构建
Foo
,所以我不知道如何引用
bar()
。你的意思是使用ctor而不是常规方法吗?你的意思是
bar
在这里是静态的吗?这样,您可以在构建
Foo
之前调用它。您的
bar()
不可能适合
消费者。除非你在lambda做别的事情。