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做别的事情。