簡體   English   中英

Java如何擴展隱藏類

[英]Java how to extend a hidden class

我需要覆蓋一個隱藏類的方法(用@hide 標記),它只在它的包中可見。 有什么辦法可以延長嗎?

更具體地說,我需要覆蓋android.widget.Editor 的getNextCursorOffset() ,因為該方法與ReplacementSpan不能很好地工作。

您可以在項目中定義相同的包android.widget 然后你可以擴展它:

public class ProjectSpecificEditor extends Editor {
    // constructors et all
    public int getNextCursorOffset() {
        //...
    }

}

但請注意,這是不鼓勵的。 即框架的下一個版本可能會更改一些類/方法簽名。 那么你只能責怪你自己。

我從瑞恩戈登那里得到了這個想法

基本上,在編譯框架時會刪除任何標有@hide內容,Android Studio 使用它來編譯您的代碼。 你可以在\\AppData\\Local\\Android\\Sdk\\platforms\\android-xx\\android.jar ryan 建議,要么自己編譯沒有@hide android 框架,要么從有根電話中獲取已經編譯的框架(因為@hide不會影響實際手機中使用的代碼)

在我看來,一個更簡單的替代方法是簡單地從android.jar提取.class文件,使用任何 Java 字節碼編輯器,然后添加缺少的方法。 然后替換android.jar的文件。

然而,正如 Tamas Rev 所提到的,標有@hide方法永遠不會被訪問,因此不能保證它存在於舊版本中,或者跨版本的行為是一致的,或者它會在未來存在!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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