如何覆盖方法或分配库类的参数值?

时间:2013-06-22 14:55:44

标签: java jar override shared-libraries

我正在使用某个库开发一个java应用程序(使用jar文件包含),我想覆盖该库中包含的类(抽象类)上存在的方法,甚至更改其中的某个参数值。 有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

扩展要覆盖该方法的类。

public class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass extends ClassFromExtLib {
    @Override
    public void foo(Object param) {
         super.foo(param);
         //adding my own implementation...
    }
}

如果无法扩展类,请使用可以执行该方法的包装类,然后向其中添加自己的逻辑。

public final class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass {
    //code to initialize the instance of the class ommited
    private ClassFromExtLib bar;

    public void foo(Object param) {
         bar.foo(param);
         //adding my own implementation...
    }

    public void foo(Object param, Object param2) {
         bar.foo(param);
         //adding my own implementation using param and param2...
    }
}

如果你想从方法中添加/删除参数,那么你不能通过重写来实现这一点,那就是重载。第二种方式对你来说是最好的。

答案 1 :(得分:1)

是和否。您可以创建一个具有所需行为的子类。

public class MyVersion extends JarVersion {

但是,如果更改签名,呼叫者通常会忽略更改。 您也可以使用委托模式。

public MyClass {
  JarClass delegate;

  public void myMethod(MyParm mp) {
    JarParm jp = makeJPfromMP(mp);
    extraStuff();
    delegate.originalMethod(jp);
    moreExtraStuff();
  }

答案 2 :(得分:1)

非常简单,

只需创建另一个扩展该类的类(假设其可扩展),您需要对其进行修改

然后覆盖您想要更改的方法。