在JAVA项目里用到了很多第三方开源的JAR包,有些时候发现某些功能不太适合自己的项目,就想改写其中的一些类或者方法,这种情况下我该怎么做呢?比如我要改写A类,是不是先把JAR解压缩,自己建个A类,路径包名都和JAR包的A类一摸一样,然后编译成CLASS文件替换JAR包的A.LASS。最后在打成JAR包?或者直接在本项目中直接覆盖JAR包的A类?这样的话,我自己的A类的路径啦,包名了,是不是都要和JAR包的A类一摸一样?各位大哥如果要是改写源码,是怎么做的?

解决方案 »

  1.   

    你用它的何必改它的用到一部分extends implements 
      

  2.   

    如果是这样情况呢在源码里  A->B->C
    A调用了B,B调用了C,我想修改B,怎么做呢
    是不是在本地直接覆盖B?这样源码里的A就能直接找到本地的?而不是原来的?
      

  3.   

    改完B JAR包winrar打开 覆盖B.class 就行了
      

  4.   


    如果A中有个setB方法,可以写个类去 extends B, 否则
    如楼上所说: 改完B JAR包winrar打开 覆盖B.class 就行了
      

  5.   

    强烈不建议楼主进行这种尝试~
    说下原因:
    1.如果项目中确定要使用第三方的jar包,那么表示你们的需求是总体一致的,这时候如果满足不了你的要求,那可以写自己的继承类扩展其功能,却不要改写其源码。
    2.如果是一个流行的第三方jar包,那么在以后的维护过程中(维护人员不是原班开发人员),那么他们对这个jar包的使用还是按照原有的使用方式进行,却不知道里面的方法已经被别人修改过,跟API中的根本不是一样的,这样会造成非常大的不便。
      

  6.   

    不允许更改,否则一切后果自负。如果 JAR 包是带有签名的,你想替换都不行!
      

  7.   

    前阵子有个JspSmartUpload包就被我给修改了,
    原本的代码有两个缺点1、不支持中文。2、存在严重的内存泄露
    这个时候我就没必要去通过继承去扩展这个功能类了,直接在原来的基础上做了修改
      

  8.   

    首先我并不是说不能修改~
    我的意思是做后期维护的时候 会对维护人员造成误导~~因为官方API的使用方式跟你修改后的使用方式是不同的,除非项目中有详细的说明文档,通知维护人员此方法已经被重写了,不然这是有不可预知风险的。
      

  9.   

    呵呵,一般情况下,先反编译后,修改有问题的代码或改进代码,注意使用winrar打开jar包,直接把修改过的class文件进行覆盖,还有特别要注意是一些内部类也一并替换