java自定义函数式接口_java基础之函数式接口

一、函数式接口在Java中是指:有且仅有一个抽象方法的接口,所以函数式接口就是可以适用于Lambda使用的接口

二、自定义函数式接口

格式:

@FunctionalInterface //该注解可省,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错

public interface MyFunctionalInterface {

void myMethod();

}

例子:

public class FunctionalInterfaceTest {

public static void main(String[] args) {

show(()->{

System.out.println("使用lambda表达式执行");

});

}

public static void show(MyFunctionalInterface inner){

inner.method();

}

}

三、使用Lambda作为参数和返回值:如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用 函数式接口作为方法参数。

例子:Lambda作为参数

public class FunctionalInterfaceTest {

public static void main(String[] args) {

getThread1(new Runnable() {

@Override

public void run() {

System.out.println(Thread.currentThread().getName()+"....执行");

}

});

getThread2(()->{

System.out.println(Thread.currentThread().getName()+"....执行");

});

}

public static void getThread1(Runnable task){

new Thread(task).start();

}

public static void getThread2(Runnable task){

new Thread(task).start();

}

}

例子:作为返回值

public class ComparatorTest {

//定义一个方法,方法的返回值类型使用函数式接口Comparator

public static Comparator getComparator(){

/*

return new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

//降序

return o2 - o1;

}

};

*/

//使用lambda简写

return((o1, o2)-> o2 - o1);

};

public static void main(String[] args) {

Integer[] arr = {1,3,9,2,7,8};

System.out.println("....排序前...."+Arrays.toString(arr));

Arrays.sort(arr,getComparator());

System.out.println("....排序后...."+Arrays.toString(arr));

}

}

四、简单明了例子

public class MyInterfacesTest {

public static void main(String[] args) {

/* getMethod(new MyInterfaces() {

@Override

public int method(String s) {

return s.length();

}

});

*/

//简写方式

getMethod(s -> s.length()); //处理

}

public static void getMethod(MyInterfaces myInterfaces){

int len = myInterfaces.method("HelloWorld"); //传参

System.out.println("该字符串的长度为:"+len);

}

}


版权声明:本文为weixin_35851553原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。