1、接口中可以定義除抽象方法外的普通方法,
- default,該方法可以有方法體,對於實現了該接口的實體可以直接調用該普通方法
- static修飾的方法, 可以直接通過接口調用
//測試java8新特性
public interface TestJava8 {
public String apply();
// 可以通過實現類的實例.方法 調用
default void fun(){
System.out.println("測試接口中的default方法");
}
// 可以直接通過:接口類.方法 調用
static void fun2(){
System.out.println("測試接口中的static方法");
}
}
2、函數式接口
函數式接口要用@FunctionInterface註解註釋(一個方法)
package com.example.demo.interface2;
@FunctionalInterface
public interface TestJava83<T,R> {
R apply(T t);
}
函數式接口的簡單應用
package com.example.demo.service;
import com.alibaba.druid.support.json.JSONUtils;
import com.example.demo.interface2.TestJava8;
import com.example.demo.interface2.TestJava82;
import com.example.demo.interface2.TestJava83;
public class TestJava8Service {
public static void main(String[] args) {
/**
* lamda表達式 如果返回是一個可以不用return,如果有多行再用return
其中()中添加的參數
()->單行語句;
()->多行語句;
()->表達式;
*/
// (s)->s 入參是什麼返回什麼
System.out.println(testJava83Method((s)->s).toString());
}
public static <T,R> R testJava83Method(TestJava83<T,R> t){
// 調用方法並給定參數
// 具體的實現方式由調用方給定
String aa = "";
Integer bb = 0;
Boolean cc = false;
return t.apply((T)bb);
}
}
1)方法的引用--::
- 類::靜態方法
- 類名稱::new --傳遞構造方法
- 特定類::普通方法
- 實例::普通方法
2)下方接口可用於方法的傳遞--java8中定義的一些接口
功能性接口 java.Util.Function<T,R>{public R apply(T t);}--接口一個參數,返回一個參數
消費性接口 Consumer<T>{public void accept(T t);}--不需要返回
供給性接口 Supplier<T>{public T get();}
斷言性接口 Predicate<T>{public boolean test(T t);}--判斷使用
3)Lamda表達式簡單應用
package com.example.demo.service;
import com.alibaba.druid.support.json.JSONUtils;
import com.example.demo.interface2.TestJava8;
import com.example.demo.interface2.TestJava82;
import com.example.demo.interface2.TestJava83;
public class TestJava8Service {
public static void main(String[] args) {
//// 匿名內部類
// System.out.println(
// testJava8Method(new TestJava8(){
// public String apply(){
// System.out.println("23");
// return "2";
// }
// })
// );
/**
* lamda表達式 如果返回是一個可以不用return,如果有多行再用return
其中()中添加的參數
()->單行語句;
()->多行語句;
()->表達式;
*/
System.out.println(testJava8Method(()->"方法的返回參數"));
System.out.println(testJava82Method((p)->p+"asdf"));
System.out.println(testJava83Method((s)->s).toString());
}
public static String testJava8Method(TestJava8 t){
return t.apply();
}
public static String testJava82Method(TestJava82 t){
// 調用方法並給定參數
return t.apply("123");
}
public static <T,R> R testJava83Method(TestJava83<T,R> t){
String aa = "";
Integer bb = 0;
Boolean cc = false;
return t.apply((T)bb);
}
}