[英]How to override a method or assign a parameter value of a library class?
我正在使用某個庫(使用jar文件包含)開發Java應用程序,我想覆蓋該庫中包含的類(抽象類)上存在的方法,甚至更改其中的某個參數值。 有辦法嗎?
擴展您要從其重寫方法的類。
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();
}
非常簡單
只需創建一個擴展該類(假設其可擴展)的類,即可對其進行修改
然后覆蓋您要更改的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.