Я понимаю сообщение об ошибке.Я знаю, что не могу получить доступ к нестатическим методам в статическом контексте.Но почему я могу сделать следующее:
Predicate<String> t = String::isEmpty; // this works
Когда isEmpty () является нестатическим методом для класса String?Посмотрите на следующий пример класса.Я понимаю логику, чтобы не допустить TestLamba :: isEmptyTest; но я не понимаю, почему String: 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;
}