ヌル引数で任意のオブジェクトへのメソッド参照を呼び出すのNullPointerException

mrboieng:

私は、任意のオブジェクトへのメソッド参照を作成しようとしていたので、私は、次のタイプを定義しました:

interface I {
    boolean get(Impl impl);
}

static class Impl {
    public boolean get() {
        return true;
    }
}

それから私は、以下のようなメソッド参照を、宣言しました:

I i = Impl::get;

私は呼び出すと:

i.get(null);

私は、NullPointerExceptionが出ます:

Exception in thread "main" java.lang.NullPointerException

これにもかかわらず、なぜ起こるか誰かは説明できImpl参照がどこにも使用されていませんか?

スイーパー:

私はあなたがこの行の意味を誤解だと思います。

I i = Impl::get;

Iかかる方法表す機能インタフェースであるImplと戻りboolean、一方、getはパラメータ戻るとらない方法があるがbooleanどのようにこの変換作業をしますか?まあ、コンパイラの実現getであるインスタンスメソッド、およびあなたが必要とする必要があり、それを呼び出すためにImplオブジェクトを。それが呼び出される前に、ちょうど関数のようにパラメータを持っていることではないですか?

コンパイラは喜んであなたが意味することを推測することができるように:

I i = impl -> impl.get();

今NPEの原因は明らかです。

一般的に、すべてのインスタンスメソッドは、型の1つの追加のパラメータを取る静的メソッド、と考えることができ、そのインスタンスメソッドの宣言型です。TT

おすすめ

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