マリアーノ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;
}
}