如何在java类中重写单个方法
我对java开发相当陌生,并且不知道如何修改现有的Android类。我想更改Android()中如何在java类中重写单个方法,java,android,methods,Java,Android,Methods,我对java开发相当陌生,并且不知道如何修改现有的Android类。我想更改Android()中Notification.Builder类中的一些方法 我确实想更改getNotification(),但在新的实现中,我需要访问私有字段(例如,mWhen,mSmallIcon) 我已经尝试扩展该类,但是无法访问超类的私有字段(即,mWhen,mSmallIcon) 更改方法的最佳实践是什么,是复制源代码并修改它吗 更新: 更准确地说:如何在现有类中更改单个方法,并且仍然可以访问现有类的私有字段 谢
Notification.Builder
类中的一些方法
我确实想更改getNotification()
,但在新的实现中,我需要访问私有字段(例如,mWhen
,mSmallIcon
)
我已经尝试扩展该类,但是无法访问超类的私有字段(即,mWhen
,mSmallIcon
)
更改方法的最佳实践是什么,是复制源代码并修改它吗
更新:
更准确地说:如何在现有类中更改单个方法,并且仍然可以访问现有类的私有字段
谢谢大家的回复 私有(内部)类、方法或字段只能从声明它的类中引用。
但是,您也可以声明自己的变量,并按照自己的意愿使用它。您只需在重写的方法中调用
super.getNotification()
,并在返回结果对象之前修改它。最佳做法是不重写方法(来自未被设计为重写的第三方类),但是创建一个新的类/方法来包装第三方类。谷歌针对这些问题:“脆弱的基类问题”,“组合重于继承”
我试图扩展这个类,但是我无法访问超类的私有字段(即mWhen、mSmallIcon)
在您要扩展的特定类中,设置这些字段值的方法数量有限。您可以重写这些方法,以保留子类中新字段中值的副本,然后在重写getNotification()
时使用这些副本
这是一种黑客行为,对于更复杂的类是不可行的
另一个技巧是对字段对象使用反射和调用。根据安全约束,这也可能不可行
如果您说的是您正试图进行的更改,可能有更好的方法。为什么要更改它?我有一个动态图标(显示温度),我需要为内容和股票代码定制布局。我知道可以通过提供自定义contentView和tickerView来实现,但我更愿意创建自定义生成器。也许传递视图会更好…谢谢,但是我仍然无法访问私有通知字段。Builder(例如,mWhen)@tibnor:是-但是你不需要,因为它们的存在只是为了设置公共通知字段。