非静的メソッドがstaticコンテキストから参照することはできませんのに、なぜ文字列::のisEmptyは働くのでしょうか?

マリアーノL:

私は、エラーメッセージを理解しています。私は、静的コンテキストでアクセス非静的メソッドをできないことを知っています。しかし、なぜ、私は、次の操作を行うことができます。

Predicate<String> t = String::isEmpty; // this works

isEmpty()はStringクラスのための非静的メソッドである場合には?次の例のクラスを見てください。私はTestLamba :: isEmptyTestを許可しないためのロジックを理解します。isEmptyこのルールを破ることができますが、私は理解していないと、文字列が理由です。

import java.util.function.Predicate;

public class TestLamba {

    public static void main(String... args) {

        Predicate<String> t = String::isEmpty; // this works
        Predicate<String> t2 = TestLamba::isEmptyTest; // this doesn't
    }

    public boolean isEmptyTest() {
        return true;
    }

}

これはString.isEmptyのソースです。それはかなり一般的な方法だと、あなたはそれが静的ではないことがわかります。

public boolean isEmpty() {
    return this.value.length == 0;
}
ハーリド・シャー:

isEmpty関数でStringクラスとisEmptyTestの関数であるTestLambaクラス。

import java.util.function.Predicate;

public class TestLamba {

    public static void main(String... args) {

        Predicate<String> t = String::isEmpty; // this works
        Predicate<TestLamba > t2 = TestLamba::isEmptyTest; //Now this will work
    }

    public boolean isEmptyTest() {
        return true;
    }

}

おすすめ

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