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

2017 年 8 月 16 日
 guyeuro

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

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

大家怎么做?

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

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

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

新方法加参数,升级服务,调用了老方法的服务再升级调用新方法
0TSH60F7J2rVkg8t
2017 年 8 月 16 日
我个人会采取这种方式来修改接口声明:

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

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

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

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

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

https://study.congcong.us/t/383319

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

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

© 2021 V2EX