Java тіліндегі функционалды интерфейс – бұл тек 1 дерексіз әдісті қамтитын интерфейс. Негізгі мақсат - оны лямбда өрнектерінде және әдіс сілтемелерінде пайдалану.
1 дерексіз әдістің болуы жалғыз шарт болып табылады, сондықтан функционалды интерфейсте
Мен оларға егжей-тегжейлі тоқталмаймын. Ең жиі қолданылатындар: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> және олардың Bi пішіндері. Қосымша мәліметтерді құжаттама бетінен табуға болады: java.util.function бумасы
default
әдістер де болуы мүмкін static
. Функционалдық интерфейске @FunctionalInterface annotationсын қосуға болады. Бұл талап етілмейді, бірақ бұл annotation бар болса, 1 дерексіз әдіс көп немесе аз болса, code құрастырылмайды. @FunctionalInterface қосу ұсынылады. Бұл интерфейсті біреу интерфейске жаңа дерексіз әдіс қосады және ол функционалды болуын тоқтатады деп алаңдамай лямбда өрнектерінде интерфейсті пайдалануға мүмкіндік береді. Java ішінде орнатылған функционалды интерфейстері бар java.util.function
.
Тағы не оқу керек: |
---|
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
}
}
Бірақ Java тілінің спецификациясында сипатталған бір нәзік нүкте бар екен: «интерфейстер Объекттен мұра емес, бірақ Объект сияқты көптеген әдістерді жасырын түрде жариялайды». Бұл функционалдық интерфейстер сыныпта анықталған дерексіз әдістерді қамтуы мүмкін дегенді білдіреді Object
. Төмендегі code жарамды, компиляция немесе орындалу қателері болмайды:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
// другие default or static методы
}
Сұхбат кезінде абай болыңыз! Іске сәт!
GO TO FULL VERSION