我对java开发相当新,并且更好地修改现有的Android类。我想更改Android中Notification.Builder
类中的一些方法(https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/Notification.java)。
具体来说,我想要更改getNotification()
,但在新实现中,我需要访问私有字段(例如mWhen
,mSmallIcon
)。
我试图扩展该类,但后来我无权访问超类的私有字段(即mWhen
,mSmallIcon
)。
更改方法的最佳做法是,复制源代码并对其进行修改?
更新: 更确切地说:如何更改现有类中的单个方法并仍然可以访问现有类的私有字段?
感谢所有回复!
答案 0 :(得分:2)
您只需在覆盖方法中调用super.getNotification()
并在返回之前修改生成的对象。
答案 1 :(得分:0)
私有(内部)类,方法或字段仅在声明它的类中引用。 但您也可以声明自己的变量并按照自己的意愿使用它
答案 2 :(得分:0)
最佳做法是不覆盖方法(来自未被设计为被覆盖的第三方类),而是创建一个包装第三方类的新类/方法。谷歌为这些:“脆弱的基类问题”,“组成而不是继承”。
答案 3 :(得分:0)
我试图扩展该类,但后来我无权访问超类的私有字段(即mWhen,mSmallIcon)。
在您要扩展的特定类中,设置这些字段值的方法数量有限。您可以覆盖这些方法,以保留子类中新字段中值的副本,然后可以在覆盖getNotification()
时使用。
这是一种破解,对于更复杂的类是不可行的。
另一个黑客是使用反射并在字段对象上调用setAccessible(true)
。根据安全限制,这也可能无法使用。
如果您确切地说出了您想要做出的改变,可能会有更好的方法。