Java中方法作为参数传递的方式
作者:一个欧维
这篇文章主要介绍了Java如何让方法作为参数传递,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
java中将方法当作参数传递的方式
1. 使用consumer接口
在Java8
中引入了一个函数式接口Consumer
的对象,该对象可以把方法作为参数进行传递。
接口定义:
@FunctionalInterface public interface Consumer<T> { void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; } }
该接口接收一个泛型参数T
,然后可以自定义实现Consumer
接口中的accept
方法来对T
进行一系列的操作,该方法没有返回值。
示例:
void testConsumer(Integer id, Consumer consumer, String msg){ consumer.accept(msg); } public static void main(String[] args){ testConsumer(System.out::println, "consumer接口测试..."); testConsumer(x -> { x = StringUtils.join(x,String.valueof(x).length()); System.out.println(x); }, "consumer接口测试...") } # 输出结果 接口测试... 接口测试...15
其实,主要是理解Consumer
消费者,就可以了~主要是对入参做一些列的操作,在stream
里,主要是用于forEach
;内部迭代的时候,对传入的参数,做一系列的业务操作,没有返回值;
这个接口,只有一个默认方法,看下注释内容,就清楚用法了,就不在写案例解释了
/**传入一个Consumer类型的参数, *他的泛型类型, *跟本接口是一致的T,先做本接口的accept操作, *然后在做传入的Consumer类型的参数的accept操作 */ default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; }
2. 基于lambda表达式
示例:
public class TestClass { interface TestFunction<T>{ boolean getBooleanValue(T t); } static class Student{ String name; Double score; Student(String name, Double score) { this.name = name; this.score = score; } Double getScore() { return score; } } static <T> void printMsg(T obj, TestFunction<T> function){ if(function.getBooleanValue(obj)){ System.out.println("result is true"); }else{ System.out.println("result is false"); } } public static void main(String[] args) { printMsg(new Student("张三",92.5),x->{ return x.getScore().compareTo(90d) > 0; }); printMsg(new Student("张三",80.5),x->{ return x.getScore().compareTo(90d) > 0; }); } } # 输出结果 result is true result is false
3. 参考资料
https://blog.csdn.net/qq_28410283/article/details/80618456
https://blog.csdn.net/qq_44964202/article/details/114992507
Java如何让方法作为参数传递
代码如下所示:
/** * @Author HE LONG CAN * @Description TODO * @Date 2022-06-26 12:21:06 */ @FunctionalInterface public interface Functional { void run(); } /** * @Author HE LONG CAN * @Description TODO * @Date 2022-06-26 12:21:22 */ public class Work { public static void doSome(Functional functional) { System.out.println("我要开始干活了"); System.out.println("我板了一块砖"); System.out.println("接下来是老板安排的任务..."); functional.run(); System.out.println("活干完了"); } } /** * @Author HE LONG CAN * @Description TODO * @Date 2022-06-26 12:22:28 */ public class Main { public static void main(String[] args) { Work.doSome(() -> { System.out.println("老板让我写报告"); System.out.println("写报告中...."); }); } }
到此这篇关于Java中方法作为参数传递的方式的文章就介绍到这了,更多相关java方法作为参数传递内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!