簡體   English   中英

如何重寫方法或分配庫類的參數值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM