从传入对象构造函数的 lambda 访问对象
Access object from lambda passed in object's constructor
我有一个 Java class MyClass 和这个构造函数:
public MyClass(Consumer<?> someMethod)
我想这样做:
final MyClass myObject = new MyClass(obj -> {
doSomethingOutsideTheContextOfMyObject();
myObject.doSmomething(obj);
});
但是我得到一个编译器错误,变量 myObject 可能没有被初始化。
根据我的研究,我无法切换显示错误的编译器,也无法伪造初始化变量,因为它必须是最终变量。我该怎么办?
此处:
final MyClass myObject
声明一个新对象myObject
。然后你继续:
= new MyClass(obj -> {
doSomethingOutsideTheContextOfMyObject();
myObject.doSmomething(obj);
在自己的声明中使用完全相同的myObject
!
这不可能!您正在以循环方式创建 "self-reference"!
我认为您传递给构造函数的 lambda 不应该是消费者;它应该是一个 BiConsumer...
类似的东西:
import java.util.function.BiConsumer;
public class MyClass<T> {
private BiConsumer<MyClass<T>, T> lambda;
public MyClass(BiConsumer<MyClass<T>, T> lambda) {
this.lambda = lambda;
}
private static void doSomethingOutside() {
// TODO Auto-generated method stub
}
private void doSomething(T obj) {
// TODO Auto-generated method stub
}
public void go(T o) {
lambda.accept(this, o);
}
public static void main(String[] args) {
MyClass<String> myObj = new MyClass<>((me, obj) -> {
doSomethingOutside();
me.doSomething(obj);
});
myObj.go("Hello World!");
}
}
喂! :)
我有一个 Java class MyClass 和这个构造函数:
public MyClass(Consumer<?> someMethod)
我想这样做:
final MyClass myObject = new MyClass(obj -> {
doSomethingOutsideTheContextOfMyObject();
myObject.doSmomething(obj);
});
但是我得到一个编译器错误,变量 myObject 可能没有被初始化。
根据我的研究,我无法切换显示错误的编译器,也无法伪造初始化变量,因为它必须是最终变量。我该怎么办?
此处:
final MyClass myObject
声明一个新对象myObject
。然后你继续:
= new MyClass(obj -> {
doSomethingOutsideTheContextOfMyObject();
myObject.doSmomething(obj);
在自己的声明中使用完全相同的myObject
!
这不可能!您正在以循环方式创建 "self-reference"!
我认为您传递给构造函数的 lambda 不应该是消费者;它应该是一个 BiConsumer...
类似的东西:
import java.util.function.BiConsumer;
public class MyClass<T> {
private BiConsumer<MyClass<T>, T> lambda;
public MyClass(BiConsumer<MyClass<T>, T> lambda) {
this.lambda = lambda;
}
private static void doSomethingOutside() {
// TODO Auto-generated method stub
}
private void doSomething(T obj) {
// TODO Auto-generated method stub
}
public void go(T o) {
lambda.accept(this, o);
}
public static void main(String[] args) {
MyClass<String> myObj = new MyClass<>((me, obj) -> {
doSomethingOutside();
me.doSomething(obj);
});
myObj.go("Hello World!");
}
}
喂! :)