2016-07-26 116 views
1

我需要重写隐藏类的一个方法(用@hide标记),它只在其包中可见。有什么方法可以扩展它吗?Java如何扩展一个隐藏类

更具体地说,我需要重写的android.widget.EditorgetNextCursorOffset()因为该方法不ReplacementSpan很好地工作。

+0

为什么不使用你自己的装饰器和编辑器的所有方法,只需要getNextCursorOffset? – SMA

+0

@SMA你的意思是克隆Editor.java?这将是疯狂的,因为它有5K +代码行。 – mljli

+0

不克隆。你会在你的新类中编写编辑器,并将其他方法的调用委托给Editor实例,而对于getNextCursorOffset,则可以实现自己的逻辑。 – SMA

回答

0

您可以在您的项目中定义相同的包,android.widget。那么你可以扩展它:

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

} 

但请注意,这是不鼓励。即框架的下一个版本可能会改变一些类/方法签名。那么你只能责怪你自己。

+0

谢谢,塔马斯!没有试过这种方式。 – mljli

+0

对不起,我没有测试它。即使我定义了相同的包,Android Studio仍然无法解析'编辑器'。有什么应该配置? – mljli

+0

良好的交叉检查是否可以从命令行进行编译。 –