我要给某个项目加功能,源码是 Java 写的,有的地方我要加上鉴权服务,比如 A.java 里有个方法 get(),我要改 get()方法,在其中加入鉴权的代码,其实就是 header 里加一个参数,但是这个 get()方法里用到了 A.java 中的私有方法。 如果我写一个类 ASon.java 继承 A.java,重写 get()方法,那其中就会用到 A 类中的私有方法,这些私有的方法又继承不下来,我还得再写一遍。感觉还不如直接新建一个 B.java,把 A.java 的代码都抄过来,然后改 get()方法。
各位有什么建议吗?
1
DovaKeen 2019-01-25 08:44:02 +08:00
能不能 b.get(){
super.get(); // 鉴权 }这样 或者把 A 里的私有方法改成 protected ? |
2
zzxCNCZ 2019-01-25 09:23:59 +08:00
super 调用下?
|
3
richieboy 2019-01-25 09:33:44 +08:00
继承,然后不符合要求的方法自己重写?
|
4
zifangsky 2019-01-25 09:41:54 +08:00
1、面向切面( AOP )了解一下;
2、反射+动态代理了解一下。 |
5
skypyb 2019-01-25 09:45:24 +08:00
楼上们说的方法只能在不改变原有 get()方法逻辑的基础上在代码前 /后加逻辑吧。
要是需要修改原先逻辑...好像没啥好方法 |
9
peyppicp 2019-01-25 10:26:05 +08:00
直接用反射拿到方法就行了
|
10
MrLeion 2019-01-25 11:12:42 +08:00
通过继承是拿不到父类的 私有方法的。
如果不能变更 A.java 的话:建议使用 静 /动态代理,或者 ASM/Javasist 等字节码操作库也是可以实现类似的功能的; 如果可以变更 A.java 的话:建议添加一个 getXxx 方法把鉴权信息,兼容该对象之前的功能; |
11
DovaKeen 2019-01-25 14:11:03 +08:00
话说回来如果有相似的代码复制粘贴是不是说明设计的不好,,违背了一些面向对象的原则,以后维护会很麻烦的,,
|