Почему String :: isEmpty работает, когда на нестатический метод нельзя ссылаться из статического контекста? - PullRequest
0 голосов
/ 16 октября 2018

Я понимаю сообщение об ошибке.Я знаю, что не могу получить доступ к нестатическим методам в статическом контексте.Но почему я могу сделать следующее:

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;
}

1 Ответ

0 голосов
/ 16 октября 2018

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; // this now will work
    }

    public boolean isEmptyTest() {
        return true;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...