方法中要增加参数,但是项目中这个方法很多地方用了,大家会怎么做?

2017-08-16 11:07:56 +08:00
 guyeuro

方法中要增加参数,但是项目中这个方法很多地方用了,

这个方法所在的类也通过 dubbo 暴露给其他服务了

大家怎么做?

5027 次点击
所在节点    程序员
45 条回复
amon
2017-08-16 11:12:01 +08:00
重载?
Morriaty
2017-08-16 11:14:38 +08:00
这就体现函数默认参数的优越性了,当然,如果是 golang,就当我没说。
guyeuro
2017-08-16 11:25:44 +08:00
@Morriaty java
guyeuro
2017-08-16 11:26:32 +08:00
@amon 其他要用这个方法的地方也需要这个增加多个参数的方法,所以重载解决不了
yibin001
2017-08-16 11:28:22 +08:00
如果当时的参数是一个对象的话,可以通过增加属性来解决。
如果是基本类型就。。。
littleylv
2017-08-16 11:34:53 +08:00
php 一般就加默认值
Qlccks2
2017-08-16 11:35:07 +08:00
原 method(param1~paramN){
掏空
新 method(param1~paramN,null)
}
新 method(param1~paramN,new param){
原方法实现
}
不知道是否可行,尽量避免吧。
kaulie
2017-08-16 11:36:33 +08:00
1. 有没有可能通过其他参数附带传进来;
2. 考虑下参数的动态绑定
SuperMild
2017-08-16 11:42:46 +08:00
原来已经使用该函数的代码,不需要使用新增参数吧?那可以考虑增加一个函数给新写的代码用。
liuzhen
2017-08-16 11:55:04 +08:00
@guyeuro 重载是对的

你把这个事情理解为这个方法所属服务的升级

老方法保留 供其他方法调用 保证以前调用它的地方不会出问题

新方法加参数,升级服务,调用了老方法的服务再升级调用新方法
0TSH60F7J2rVkg8t
2017-08-16 12:56:17 +08:00
我个人会采取这种方式来修改接口声明:

假设原函数: method(param1, param2)

首先,新增函数: method2(param1, param2, param3)

然后让原函数 method() 直接内部直接 call method2,并添加默认值的 param3 传递。

开发文档和源码里标记 method 为 deprecated。并注明将在数个版本后彻底移除该函数,建议使用 method2 替代。
liyu4
2017-08-16 13:04:45 +08:00
@Morriaty 跟 golang 有什么关系,golang 有方法啊
SuperMild
2017-08-16 13:21:49 +08:00
@liyu4 有些动态语言,比如 JavaScript,函数的参数是不固定数量的,同一个函数,调用的时候塞两个参数给它也行,塞三个参数给它也行。
zj299792458
2017-08-16 13:25:31 +08:00
Java:重载,c:写个和原来一样的方法,以默认参数调用新方法。
rocksolid
2017-08-16 13:33:51 +08:00
说重载的估计没理解楼主意思,如果你在 100 个地方调用了这个函数,重载还是要在 100 个地方修改一遍。楼主估计是只想改这函数不想动调用的地方
misaka19000
2017-08-16 13:53:05 +08:00
@rocksolid #15 重载为什么要改调用函数?
Shura
2017-08-16 13:53:50 +08:00
@rocksolid 不需要改调用啊,直接改函数实现。
if 参数数量等于原来的
调用原函数
else
调用新函数
nullen
2017-08-16 13:55:08 +08:00
@ahhui 同。
rocksolid
2017-08-16 13:58:03 +08:00
@misaka19000 楼主不是说了么,原来的地方需要使用增加参数的新函数
rocksolid
2017-08-16 13:59:12 +08:00
@Shura 原来使用旧函数的地方全要换新的增加参数的函数

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

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

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

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

© 2021 V2EX