Интерфейси функсионалӣ дар Java интерфейсест, ки танҳо 1 усули абстрактиро дар бар мегирад. Мақсади асосӣ истифодаи он дар ифодаҳои лямбда ва истинодҳои методӣ мебошад.
Мавҷудияти 1 усули абстрактӣ ягона шарт аст, бинобар ин интерфейси функсионалӣ инчунин метавонад
Ман ба таври муфассал дар бораи онҳо таваққуф намекунам. Ман қайд мекунам, ки бештар истифода мешаванд: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> ва шаклҳои Bi . Тафсилоти бештарро дар саҳифаи ҳуҷҷатҳо пайдо кардан мумкин аст: Package java.util.function
default
усулҳоро дар бар гирад static
. Шумо метавонед шарҳи @FunctionalInterface-ро ба интерфейси функсионалӣ илова кунед. Ин талаб карда намешавад, аммо агар ин эзоҳ мавҷуд бошад, агар зиёда аз 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
. Рамзи дар поён овардашуда дуруст аст, ҳеҷ гуна хатогиҳои компилятсионӣ ё вақти корӣ вуҷуд надоранд:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
// другие default or static методы
}
Ҳангоми мусоҳиба эҳтиёт шавед! Барори кор!
GO TO FULL VERSION