【发布时间】:2013-06-22 14:55:44
【问题描述】:
我正在使用某个库(使用 jar 文件包含)开发 Java 应用程序,我想覆盖该库中包含的类(抽象类)上存在的方法,甚至更改其中的某个参数值. 有没有办法做到这一点?
【问题讨论】:
-
如果允许,您可以尝试扩展类。这就是继承的意义所在。
标签: java jar overriding shared-libraries
我正在使用某个库(使用 jar 文件包含)开发 Java 应用程序,我想覆盖该库中包含的类(抽象类)上存在的方法,甚至更改其中的某个参数值. 有没有办法做到这一点?
【问题讨论】:
标签: java jar overriding shared-libraries
扩展您要从中重写方法的类。
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...
}
}
如果你想在方法中添加/删除参数,那么你不能通过覆盖来做到这一点,那就是重载。第二种方式最适合你。
【讨论】:
是的,不是的。您可以创建一个具有您想要的不同行为的子类。
public class MyVersion extends JarVersion {
但是,如果您更改签名,调用者通常会忽略更改。 您也可以使用委托模式。
public MyClass {
JarClass delegate;
public void myMethod(MyParm mp) {
JarParm jp = makeJPfromMP(mp);
extraStuff();
delegate.originalMethod(jp);
moreExtraStuff();
}
【讨论】:
很简单,
只需创建另一个类来扩展您需要修改的类(假设它是可扩展的)
然后重写你想要改变的方法。
【讨论】: