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