Я инициализирую объект, а в конструкторе я пропускаю лямбду. В лямбда мне хотелось бы получить доступ к объекту, который я инициализирую.Как получить доступ к «этому» из области параметров конструктора?
MyObject obj = new MyObject(params -> {
this.xyz(); //Tries to access scope of class surrounding obj
MyObject.this.xyz(); //Error: 'MyObject' is not a surrounding class
obj.xyz(); //Error: Variable 'obj' might not have been initialized.
});
Пример MyObject
Класс:
public class MyObject {
//Missing constructor
public void xyz(){
//Do stuff
}
}
Я предпочел бы не пройти this
к лямбда, если это возможно.
Если есть способ сделать «временную конечную переменную», я не могу ее найти.
Выражение лямбда является объектом внутри, поэтому 'this' в любом случае не будет ссылаться на правильный объект внутри этого контекста, я думаю, вы должны передать его явно. – Jack
Не имеет смысла обращаться к конструируемому объекту, пока он не будет полностью сконструирован, то есть после возврата конструктора. – EJP
Почему вы не хотите использовать 'this'? Выражение лямбда не отменяет его, поэтому оно относится к окружающему MyObject. –