Java 代码中业务代码的方法入参是 Function 这种?真的合适吗?

2023-08-07 16:35:12 +08:00
 lvxiaomao

众所周知,java 提供了 Function 、Supplier 等函数式接口。

在新公司的业务代码中,入参是 Function 这种,我看了一下是因为有 2 个地方调用,这种直接调用一个封装好的方法不行吗? 否则每次看到在方法内调用这 func.get()的时候,还得返回代码入参看看具体的 function 是啥,真的好麻烦呀;

如果是提供工具类,使用函数式参数我认为是合理的,但是业务代码真的适合这样写吗?

你们的代码中有这样的入参吗?

3607 次点击
所在节点    程序员
34 条回复
jorneyr
2023-08-07 16:39:04 +08:00
Java 不支持函数式编程。
wetalk
2023-08-07 16:39:54 +08:00
换个思路,把函数式接口当成匿名内部类的对象,就容易接受了
unco020511
2023-08-07 16:40:32 +08:00
这种很正常吧,反正我们从 java 换到 kotlin 后,很多函数式参数
lvxiaomao
2023-08-07 16:50:12 +08:00
@wetalk #2 但是读起来真的麻烦,读到方法一半,然后返回去看看这个 function 是啥
lvxiaomao
2023-08-07 16:50:59 +08:00
@unco020511 #3 就是读起来费劲
mgzu
2023-08-07 16:58:41 +08:00
有没有可能是参数名命名的问题呢,func 修改为更具体的命名,如:getXXX ,doXXX ,达到见名知意的效果
Oktfolio
2023-08-07 17:01:15 +08:00
用啊,为什么不用?
TWorldIsNButThis
2023-08-07 17:02:30 +08:00
再正常不过了
TWorldIsNButThis
2023-08-07 17:05:10 +08:00
另外多说一嘴,函数入参是最简单的 ioc 方式
adoal
2023-08-07 17:05:15 +08:00
不如再换个公司,还在用 JDK 1.6 维护遗留系统的
xiaoHuaJia
2023-08-07 17:06:44 +08:00
用 贼好用
issakchill
2023-08-07 17:12:00 +08:00
挺好用的啊
hepin1989
2023-08-07 17:15:43 +08:00
挺好的,合适,不过可以看看团队的程度。
luzemin
2023-08-07 17:18:00 +08:00
挺好用的,对标 C#中的委托,把函数当参数传递
jiangteng
2023-08-07 17:18:58 +08:00
都提供了为什么不用,确实能写起来更方便啊,特别是针对逻辑半截需要做不同处理的
chendy
2023-08-07 17:24:54 +08:00
有没有一种可能这玩意叫 策略模式
看着费劲可能是:
1. 抽象不对导致必须关注实现细节
2. 修改维护需要必须看实现细节
反正也就一个 find usage 的事,相比之下还是 一堆 XXService 接口对一个 XXServiceImpl 的 写法最蛋疼…
gogo789
2023-08-07 17:35:42 +08:00
在业务代码里面有,感觉确实不太合适,业务代码的特点就是通用性比较差。举例来说,一个 Service 的入参,根据不同的 Function 执行不同的逻辑,以后维护、测试也是个问题,建议还是拆分成两个不同的方法。
Rache1
2023-08-07 17:38:14 +08:00
@lvxiaomao #4 Intellij 系列的 IDE ,你可以选中方法后按下 Ctrl+SHIF+I(大写字母 i),可以有一个小窗来显示这个方法的实现。
tedzhou1221
2023-08-07 17:41:30 +08:00
正在学习函数式编程,按理解是函数式编程 易于理解、对测试友好。
tedzhou1221
2023-08-07 17:43:21 +08:00
看了 dubbo 源码,服务注册功能。不少地方都用了函数编程。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/963088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX