我使用的是有一個公共靜態方法庫getFile()
在Utils
類中定義。圖書館在內部使用Utils.getFile()
,但這種方法並沒有很好地實施。是否有可能取代Java中的公共靜態方法?
我想知道是否有可能以某種方式覆蓋Utils.getFile()
所以它會用我的實現呢?
我使用的是有一個公共靜態方法庫getFile()
在Utils
類中定義。圖書館在內部使用Utils.getFile()
,但這種方法並沒有很好地實施。是否有可能取代Java中的公共靜態方法?
我想知道是否有可能以某種方式覆蓋Utils.getFile()
所以它會用我的實現呢?
否 - 不與幾乎複製類和替換它。否則,對於Christian的評論,更好的選擇可能是+1:Why doesn't Java allow overriding of static methods?
如果它是非靜態的並且該方法不是私有的或最終的,則可以爲該類繼承子類,提供您自己的重寫方法並使用它。
不,你不能覆蓋它。靜態方法有這些類型的問題,例如,編寫單元測試時。
通過獲取庫的源代碼修復代碼並重新創建jar文件。嘗試使用JAD(以及FrontEndPlus)將.class文件反編譯爲.java文件。
如果呼叫在您的代碼,那麼你可以使用你的完全合格的utils的類名前綴的方法。例如:{命名空間} .Utils.getFile()..
不幸的是,沒有。 This answer on StackOverflow explains why that is。你需要創建一個包裝類。大多數語言都是這樣,在鏈接中再次解釋。
您唯一的選擇是替換類。您可以編譯一個不同的版本,並在類路徑中更早地創建它,或者替換原始副本。
Java不支持靜態方法的多態性(您可以隱藏但不能覆蓋靜態方法)因此,實用程序類通常會使final
清楚。爲了實現這個,我使用了沒有實例的enum
。
public enum Util {;
public static ReturnType method(ParameterTypes... args) {
}
}
如果你的實現,爲什麼你不能在util中編寫你自己的方法。 –