یک رابط کاربردی در جاوا رابطی است که فقط شامل 1 روش انتزاعی است. هدف اصلی استفاده از آن در عبارات لامبدا و مراجع روش است.
وجود 1 روش انتزاعی تنها شرط است، بنابراین یک رابط کاربردی نیز می تواند شامل
من به جزئیات آنها نمی پردازم. متذکر می شوم که بیشترین استفاده از آنها عبارتند از: Consumer<T> ، Function<T,R> ، Predicate<T> ، Supplier<T> ، UnaryOperator<T> و اشکال Bi آنها . جزئیات بیشتر را می توان در صفحه مستندات یافت: Package java.util.function
default
متدهایی باشد static
. می توانید حاشیه نویسی @FunctionalInterface را به یک رابط کاربردی اضافه کنید. این مورد الزامی نیست، اما اگر این حاشیهنویسی وجود داشته باشد، در صورت وجود بیشتر یا کمتر از 1 روش انتزاعی، کد کامپایل نمیشود. توصیه می شود @FunctionalInterface را اضافه کنید. این به شما این امکان را می دهد که از رابط در عبارات لامبدا استفاده کنید بدون اینکه نگران باشید که کسی یک روش انتزاعی جدید را به رابط اضافه کند و کارایی آن متوقف شود. جاوا دارای رابط های کاربردی داخلی است که در 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
}
}
اما مشخص شد که یک نکته ظریف در مشخصات زبان جاوا توضیح داده شده است: "اینترفیس ها از Object ارث نمی برند، بلکه به طور ضمنی بسیاری از روش های مشابه Object را اعلام می کنند." این بدان معنی است که رابط های تابعی می توانند علاوه بر این، متدهای انتزاعی تعریف شده در کلاس را نیز داشته باشند Object
. کد زیر معتبر است، هیچ خطای کامپایل یا زمان اجرا وجود نخواهد داشت:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
// другие default or static методы
}
در طول مصاحبه مراقب باشید! موفق باشید!
GO TO FULL VERSION