先上代码
// 同一个类中的两个方法如下
// 伪代码
public void update(int userId, User user) {
update(userId, user.getLanguage());
}
public void update(int userId, String language) {...略}
如题,是有什么特殊的含义或者作用吗?
我比较喜欢单一职责,所以对这种方式不太理解
PS: 没有什么其他的意思,就是单纯的想了解一下,本着求知的心态
1
randyo 2020-05-05 18:22:49 +08:00 via Android
记得叫重载
|
3
dandycheung 2020-05-05 18:29:30 +08:00 via iPhone
作为工具类的设计者,这样可以给使用者更多的方便。
|
4
FutherAll 2020-05-05 18:31:55 +08:00 via iPhone
有没有可能外面拿不到 user.language
|
5
HanMeiM OP @dandycheung 这个在逻辑层,我个人觉得没有必要保留第一个方法,在调用的时候你能更明确的知道这个方法需要什么函数,你就传什么参数,为什么要进入方法体内部让方法帮你选你需要哪个参数呢。
|
6
randyo 2020-05-05 18:33:27 +08:00 via Android
可以用来拆分功能,比如更新语言,更新邮箱,更新昵称,拆分开来可以单独使用也可以划分细节,调用更新整个 user 也可以直接调用各个功能点就行了
|
9
HanMeiM OP @randyo 这个代码是个伪代码,实际的代码就是更新某个具体的属性,方法名也是 update + 属性名,而且第一个方法内部就是我写的那样一行。。。
|
10
dandycheung 2020-05-05 18:38:08 +08:00 via iPhone
@HanMeiM 对于这么细节的设计,我给出了一个可以这样设计 /编写的理由;你依然可以认为你自己的设计方案 /理念更好。如果你偏要寻找什么深层意义,那是没有必要的。具体问题具体分析,用这样的具体例子来探讨更高层次的 API 设计理念也不太适合。
|
11
randyo 2020-05-05 18:41:42 +08:00 via Android
@HanMeiM 可以继续加,各个数据可能更新代码也比较复杂,而且别人调用有 user 就传,只想更新某个数据也不用构造一个 user 传进来
|
12
MonoLogueChi 2020-05-05 18:51:25 +08:00 via Android 1
|
13
HanMeiM OP @MonoLogueChi 诶,原本代码就是这样,我只不过改了一下方法名。
不过你这个答案让我学习了 |
14
gen900 2020-05-06 01:26:47 +08:00 via iPhone
说重载的笑死了,这叫多态。可以处理不同的输入类型。对外暴露 2 种接口,至于是否必要要结合业务需求来说了。
|
18
a1562619919 2021-05-12 13:10:00 +08:00 via Android
java 的重载方法中的方法参数不支持动态分配,编译器无法知道运行时具体是 User 对象的哪个子类。改成调用重写方法后,就可以调用对象运行时相应的重写方法。
|