来自lambda的访问对象在对象的构造函数中传递

Wal*_*ter 3 java lambda constructor new-operator

我有一个带有这个构造函数的Java类MyClass:

public MyClass(Consumer<?> someMethod)
Run Code Online (Sandbox Code Playgroud)

我想这样做:

final MyClass myObject = new MyClass(obj -> { 
    doSomethingOutsideTheContextOfMyObject();
    myObject.doSmomething(obj);
    });
Run Code Online (Sandbox Code Playgroud)

但是我得到一个编译错误,即变量myObject可能没有被初始化.

根据我的研究,我无法切换显示错误的编译器,我不能伪造 - 初始化变量,因为它必须是最终的.我该怎么办?

Gho*_*ica 6

这里:

final MyClass myObject
Run Code Online (Sandbox Code Playgroud)

声明一个新对象myObject.然后你继续:

  = new MyClass(obj -> { 
  doSomethingOutsideTheContextOfMyObject();
  myObject.doSmomething(obj);
Run Code Online (Sandbox Code Playgroud)

myObject在自己的声明中使用相同的!

那是不可能的!您正在以循环方式创建"自我引用"!