我要给某个项目加功能,源码是 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 话说回来如果有相似的代码复制粘贴是不是说明设计的不好,,违背了一些面向对象的原则,以后维护会很麻烦的,, |