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

    }

}

 

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