采用lambda表达式:

import java.util.function.Function;
class Test { public static void main(String... args) {
Function<Integer, Integer> increase = e -> e + 7; // lambda表达式 System.out.println(increase.getClass()); funcPlus(3, increase); } public static void funcPlus(int value, Function<Integer, Integer> func) {
System.out.println(func.apply(value));
} }

输出结果:

class com.classTest.Test$$Lambda$1/0x0000000801200840
10

(1)apply() 函数在最新的1.8 Java版本才支持

java.util.function
Interface Function<T,R>
Type Parameters:
T - the type of the input to the function
R - the type of the result of the function
All Known Subinterfaces:
UnaryOperator<T>
Functional Interface:
This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference. @FunctionalInterface
public interface Function<T,R>
Represents a function that accepts one argument and produces a result.
This is a functional interface whose functional method is apply(Object). Since:
1.8

API文档:https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html

采用Callable方式:

import java.util.concurrent.Callable;

public class CallableUse {
public static void main(String... args) { // final int num = 100770; or
int num = 100770;
// 使用匿名的内部类, 如果需要传递参数可能需要将变量转换成final:
try {
callMethod(100, new Callable<Integer>() {
public Integer call() {
return needOperation(num);
}
});
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} } public static int needOperation(int param) {
// do something
param = 999;
return param;
} public static void callMethod(int i, Callable<Integer> myFunc) {
// do something
try {
System.out.println(myFunc.call() );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

输出结果:

999

附:

同时在这篇帖子上有人采用Java反射机制:

https://stackoverflow.com/questions/4685563/how-to-pass-a-function-as-a-parameter-in-java

import java.lang.reflect.Method;

public class Demo {

    public static void main(String[] args) throws Exception{
Class[] parameterTypes = new Class[1];
parameterTypes[0] = String.class;
Method method1 = Demo.class.getMethod("method1", parameterTypes); Demo demo = new Demo();
demo.method2(demo, method1, "Hello World");
} public void method1(String message) {
System.out.println(message);
} public void method2(Object object, Method method, String message) throws Exception {
Object[] parameters = new Object[1];
parameters[0] = message;
method.invoke(object, parameters);
} }

参考资料:

https://techndeck.com/how-to-pass-function-as-a-parameter-in-a-method-in-java-8/

Java中如何将函数名作为参数传递的更多相关文章

  1. Java中的回调函数学习

    Java中的回调函数学习 博客分类: J2SE JavaJ#  一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...

  2. java中string.trim()函数的使用

    java中string.trim()函数的的作用是去掉字符串开头和结尾的空格,防止不必要的空格导致的错误. public static void main(String arg[]){ String ...

  3. 转载:java中Thread.sleep()函数使用

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  4. Java中的回调函数学习-深入浅出

    Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...

  5. Java中的split函数的用法

    Java中的 split  函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回: 例如: String str="1234@abc"; String[] a ...

  6. Java中能否利用函数参数来返回值

    转自https://blog.csdn.net/da_da_xiong/article/details/70039532 我们在写代码时通常会遇到一种情况,就是我们可能希望在一个函数操作完成后返回两个 ...

  7. JAVA中的Random()函数

    Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范 ...

  8. java中的Sort函数,你值得看

    基于C语言中的sort如此这么方便,自然而然,java中也有类似C的sort函数. 1.普通数组:Arrays.sort(数组名,开始位置,结束位置). 2.类中属性排序: 模板: class A { ...

  9. java中的getClass()函数

    Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代 ...

随机推荐

  1. 二. 简单初步认识SpringCloud

    (一)微服务的实现方式很多,但是最火的莫过于Spring Cloud了.为什么? 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大. 技术强:Spring作为Java领域 ...

  2. overflow和absolute之间的问题,transfrom可以解决

    CSS代码: .overflow { width: 191px; height: 191px; border: 2px solid #beceeb; overflow: hidden; } .over ...

  3. 【面试题2020-03-30】面试官:对并发熟悉吗?说说Synchronized及实现原理

    一.Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法. Synchronized的作用主要有三个: 1.确保线程互斥的访问同 ...

  4. hdu4814 模拟(黄金分割进制转换)

    题意:       给你一个十进制数,让你把他转化成Q进制数,Q是黄金分割比 = (1+√5)/2. 思路:        首先要明确的就是虽然q是实数,但是依然可以转换成q进制数,因为任何数num, ...

  5. POJ1904 强联通(最大匹配可能性)

    题意:       有n个王子,n个公主,然后给你每个王子喜欢的公主,最后问你在不影响最大匹配的前提下,每个王子可以匹配那些公主. 思路:       是hdu4685的减弱版,之前研究过hdu468 ...

  6. UVA11300分金币

    题意:      圆桌旁作者n个人,每个人都有一定数量的金币,他们每次可以给相邻的人一枚金币(可以给多次),问所有人金币数都相同的话最少要给多少次金币.思路:       这个题目感觉很好,首先我们可 ...

  7. Python中的可迭代Iterable和迭代器Iterator

    目录 Iterable可迭代对象 如何判断对象是否是可迭代对象Iterable Iterator迭代器 如何判断对象是否迭代器Iterator 将Iterable转换成Iterator Iterabl ...

  8. 路由协议之RIP

    目录 RIP协议 RIP的路由汇总和过滤 RIP的认证 RIP的防环机制 华为/思科中的配置 RIP协议 RIP协议是一种内部网关协议(IGP),底层是贝尔曼福特算法,是一种动态路由选择协议,用于自治 ...

  9. UVA10780幂和阶乘

    题意:       输入两个整数n,m(1<m<5000,0<n<10000)求最小的k使得m^k是n!的因子. 思路:      比较容易想,一开始手残wa了好几次,我们直接 ...

  10. coding push 上传文件

    git config --global user.name "lyshark" &git config --global user.email "11815068 ...