繁体   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