ラムダからAccessオブジェクトは、オブジェクトのコンストラクタに渡されました

ウォルター:

私はこのコンストラクタを使用してJavaクラスMyClassのを持っています:

public MyClass(Consumer<?> someMethod)

そして、私はそれを行うしたいと思います:

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

しかし、私は、変数myObjectというの初期化されない可能性があること、コンパイラのエラーを取得します。

私の研究によると、私はエラーを示すコンパイラの切り替えはできませんし、それが最終的になければならないと私は、変数を偽-初期化できません。何をすればよいでしょうか?

Highbrainer:

私はあなたのコンストラクタに渡しているラムダは消費者であってはならないと思います。それは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!");
    }
}

HTH!:)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=199742&siteId=1