有两个自动生成的 class: A 和 B,由于是自动生成的,我们无法对其进行修改
同时 A 和 B 在类、接口层次结构上也没有任何关系,但是它们的成员和方法恰巧是完全一样的
我们需要在代码中,对其进行一些处理
void dealWithA(A a) {
... a.member1 ... a.member3 ... a.member6 ...
}
void dealWithB(B b) {
... b.member1 ... b.member3 ... b.member6 ...
}
这些处理函数可能也就十几行,但是里面的内容却是完全一样的,因此看起来很不舒服
大家遇到过这样的问题吗?请问在这种情况下,用什么方法可以以最低的 (或者一个合适的) 成本消除重复代码?
1
luban 2018-09-24 19:44:18 +08:00 via iPhone
bean 复制,Spring 有 beanutils,或者用 dozer 也行
|
2
johnniang 2018-09-24 19:47:47 +08:00 via Android
合理利用反射
|
3
bxb100 2018-09-24 19:52:50 +08:00 via Android
1l 正解
|
4
lhx2008 2018-09-24 19:59:41 +08:00 via Android
既然是自动生成的,反射走起吧
|
5
narcotics 2018-09-24 20:35:57 +08:00 via Android
http://thinking-in-code.blogspot.com/2008/11/duck-typing-in-java-using-dynamic.html?m=1
duck typing in java 可参考一下 |
6
ymj123 2018-09-24 21:06:38 +08:00 via Android
shell 写多了直接想到 ses -i
|
7
fleam 2018-09-24 21:06:51 +08:00 via iPhone
说实话没看懂……太多重复的东西明确业务边界,可以抽象成一个公共的方法,否则就写成两个……
|
8
shalk 2018-09-24 21:09:11 +08:00 via iPhone
适配器模式
|
9
micean 2018-09-24 21:19:02 +08:00 3
如果是 2 个不相干但是代码恰好相同的业务,那你别去动它
如果以后其中 a 业务发生变化,直接修改代码即可,而不是要去考虑分解不相干的 b 业务 |
10
wdlth 2018-09-24 21:25:22 +08:00
可以用 AOP,尽量不要动原来的代码。
|
11
lrh3321 2018-09-25 08:27:41 +08:00
自动生成的,还是不相干的两个类,那就放着别管。
|
12
chocotan 2018-09-25 09:09:27 +08:00
beanutil+1
|