我有一个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?*/ );
}
}
如何从lambda调用方法Foo#bar()
?我尝试使用this.bar()
,Foo.this.bar()
,但无济于事。设置器是另一种方法,但是最好使用构造器。
编辑1:Foo#bar
不是静态的。
答案 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();
});
}
}