Mariano L:
Eu entendo a mensagem de erro. Eu sei que eu não posso métodos não-estáticos de acesso em um contexto estático. Mas por que eu posso fazer o seguinte:
Predicate<String> t = String::isEmpty; // this works
Quando isEmpty () é um método não-estático para a classe String? Olhe para o seguinte exemplo de classe. Eu entendo a lógica de não permitir TestLamba :: isEmptyTest; mas o que eu não entendo é por que Cordas: isEmpty pode quebrar essa regra:
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;
}
}
Esta é a fonte para String.isEmpty. É um método muito comum e você pode ver que não é estática:
public boolean isEmpty() {
return this.value.length == 0;
}
Khalid Shah:
isEmpty
é a função da String
classe e isEmptyTest
é a função da TestLamba
classe.
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;
}
}