詳解Java函式式介面
知識點
函式式介面:有且只有一個抽象方法的介面,稱之為函式式介面
當然介面中可以包含其他的方法(預設,靜態,私有)
@FunctionalInterface註解
作用:可以檢測介面是否是一個函式式介面
是:編譯成功
否:編譯失敗(介面中沒有抽象方法抽象方法的個數多餘1個)
@FunctionalInterface
public interface MyFunctionalInterface {
//定義一個抽象方法
public abstract void method();
}
函式式介面的使用:一般可以作為方法的引數和返回值型別
public class MyFunctionalInterfaceImpl implements MyFunctionalInterface {
@Override
public void method() {
}
}
public class Demo {
//定義一個方法,引數使用函式式介面MyFunctionalInterface
public static void show(MyFunctionalInterface myInter){
myInter.method();
}
public static void main(String[] args) {
//呼叫show方法,方法的引數是一個介面,所以可以傳遞介面的實現類物件
show(new MyFunctionalInterface() {
@Override
public void method() {
}
});
show(new MyFunctionalInterfaceImpl());
//呼叫show方法,方法的引數是一個函式式介面,所以我們可以Lambda表示式
show(()->{
System.out.println("使用Lambda表示式重寫介面中的抽象方法");
});
//簡化Lamba表示式
show(()-> System.out.println("使用Lambda表示式重寫介面中的抽象方法"));
}
}
如果一個方法的返回值型別是一個函式式介面,那麼就可以直接返回一個Lambda表示式。
當需要通過一個方法來獲取一個java.util.Comparator介面型別的物件作為排序器時,就可以調該方法獲取。
public class Comparator {
//定義一個方法,方法的返回值型別使用函式式介面Comparator
public static java.util.Comparator<String> getComparator(){
//方法的返回值型別是一個介面,那麼我們可以返回這個介面的匿名內部類
//一
/* return new java.util.Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 02-01;
}
};
*/
//二
return ((o1, o2) -> o2.length()-o1.length());
}
}
例如java.lang.Runnable介面就是一個函式式介面,
假設有一個startThread方法使用該介面作為引數,那麼就可以使用Lambda進行傳參。
這種情況其實和Thread類的構造方法引數為Runnable沒有本質區別。
public class Runnable {
//定義一個方法startThread,方法的引數使用函式式介面Runnable
public static void startThread(java.lang.Runnable run) {
//開啟多執行緒
new Thread(run).start();
}
public static void main(String[] args) {
//呼叫startThread方法,方法的引數是一個介面,那麼我們可以傳遞這個介面的匿名內部類
startThread(new java.lang.Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "-->" + "執行緒啟動了");
}
});
//呼叫startThread方法,方法的引數是一個函式式介面,所以可以傳遞Lambda表示式
startThread(() ->
System.out.println(Thread.currentThread().getName() + "-->" + "執行緒開啟"));
//優化Lambda表示式
startThread(()-> System.out.println(Thread.currentThread().getName()));
}
}
相關文章
- Java函式式介面Java函式
- Java建構函式詳解Java函式
- java8特性-函式式介面Java函式
- Java 函式式介面 lamada 應用Java函式
- Java 8 Function 函式介面JavaFunction函式
- Java @FunctionInterface函式式介面使用說明JavaFunction函式
- Java學習隨筆(函式式介面)Java函式
- 簡析JAVA8函式式介面Java函式
- 函式式介面函式
- SetupDiGetClassDevs函式詳解dev函式
- Java8之Stream-函式式介面Java函式
- 「Java8系列」神奇的函式式介面Java函式
- Java8的新特性--函式式介面Java函式
- java8 新特性之函式式介面Java函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- Java8新特性探索之函式式介面Java函式
- java8 函式式介面——Function/Predict/Supplier/ConsumerJava函式Function
- 3.11 solidity 函式詳解Solid函式
- mysql常用函式詳解MySql函式
- python socket函式詳解Python函式
- fcntl函式用法詳解函式
- 建構函式詳解函式
- 箭頭函式詳解函式
- 函式引數詳解函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Java深海拾遺系列(5)---函式式介面Functional InterfaceJava函式Function
- Python正規表示式 findall函式詳解Python函式
- 箭頭函式this指向詳解函式
- PHP BC Math 函式詳解PHP函式
- vimscript-expand函式詳解函式
- Oracle中pivot函式詳解Oracle函式
- Python中Numpy函式詳解Python函式
- TypeScript中的函式詳解TypeScript函式
- jquery.ajaxSetup()函式詳解jQuery函式
- 還不瞭解一下 Java 8 Predicate 函式介面Java函式
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- 人工智慧---神經網路啟用函式恆等函式、sigmoid函式、softmax函式詳解人工智慧神經網路函式Sigmoid
- TypeScript 函式介面TypeScript函式