java8中的接口-新增方法、及函數式接口使用

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);

    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章