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