Uma interface funcional em Java é uma interface que contém apenas 1 método abstrato. O objetivo principal é usá-lo em expressões lambda e referências de métodos.
A presença de 1 método abstrato é a única condição, portanto uma interface funcional também pode conter
Não vou me alongar sobre eles em detalhes. Observo que os mais utilizados são: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> e seus formulários Bi . Mais detalhes podem ser encontrados na página de documentação: Pacote java.util.function
default
métodos static
. Você pode adicionar a anotação @FunctionalInterface a uma interface funcional. Isso não é obrigatório, mas se esta anotação estiver presente, o código não será compilado se houver mais ou menos de 1 método abstrato. Recomenda-se adicionar @FunctionalInterface. Isso permitirá que você use a interface em expressões lambda sem se preocupar com a possibilidade de alguém adicionar um novo método abstrato à interface e ela deixará de funcionar. Java possui interfaces funcionais integradas alojadas no java.util.function
.
O que mais ler: |
---|
import java.util.function.Predicate;
//Определяем свой функциональный интерфейс
@FunctionalInterface
interface MyPredicate {
boolean test(Integer value);
}
public class Tester {
public static void main(String[] args) throws Exception {
MyPredicate myPredicate = x -> x > 0;
System.out.println(myPredicate.test(10)); //true
//Аналогично, но используется встроенный функциональный интерфейс java.util.function.Predicate
Predicate<Integer> predicate = x -> x > 0;
System.out.println(predicate.test(-10)); //false
}
}
Mas acontece que há um ponto sutil descrito na especificação da linguagem Java: “as interfaces não herdam do Object, mas declaram implicitamente muitos dos mesmos métodos do Object”. Isso significa que as interfaces funcionais podem conter adicionalmente métodos abstratos definidos na classe Object
. O código abaixo é válido, não haverá erros de compilação ou execução:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
// другие default or static методы
}
Tenha cuidado durante a entrevista! Boa sorte!
GO TO FULL VERSION