Search code examples
javalambdaconstructornew-operator

Access object from lambda passed in object's constructor


I have a Java class MyClass with this constructor:

public MyClass(Consumer<?> someMethod)

And I would like to do that:

final MyClass myObject = new MyClass(obj -> { 
    doSomethingOutsideTheContextOfMyObject();
    myObject.doSmomething(obj);
    });

But I get an compiler error that variable myObject might not be initialized.

According to my research I cannot switch of the compiler showing the error and I cannot fake-initialize the variable as it has to be final. What shall I do?


Solution

  • I think that the lambda you are passing to your Constructor should not be a Consumer ; it should be a BiConsumer...

    Something like that :

    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!");
        }
    }
    

    HTH! :)