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