【发布时间】:2013-01-03 07:55:25
【问题描述】:
我想替换我知道源代码的class 的函数。问题是我无法覆盖该函数,因为它是私有的,而且我无法扩展类并覆盖整个功能,因为 bad 调用在每个可能的构造函数中。
现在我完全迷失了,我不知道如何实现所需的功能(主题化 Android VideoView 控件的控件,即 MediaController)。有没有办法用反射或类似的东西替换函数?或者甚至可以不调用超类的构造函数而是调用超超类?
这是一个非常基本的类,它显示了我的问题:
public class Base {
public Base(int state) {
// must be called
}
}
public class Example extends Base {
public Example(int state, boolean bla) {
super(state);
badCall();
}
public Example(int state) {
this(state, false);
}
private badCall() {
// doing bad things
}
}
另外请注意,我需要有一个 Example 的实例,所以我不能简单地复制该类。
【问题讨论】:
-
你能在构造函数运行后“反转”“badCall()”的效果吗?丑陋,但也许是“绒毛”最少的解决方案。或者也许(我没有 AOP 经验,所以不确定......)可以通过面向方面的编程来实现,并拦截调用。
-
不,我不能“逆转效果”。这是关于 MediaController 中的播放/暂停按钮,我看不到任何方法来观察变化。 @assylias 是否也可以在 android 中使用它?我不知道那个类/框架。
-
你不能重写第二个构造函数(带(int state))直接调用super(state)然后this.bla=false?
-
@GeorgeD 不,我不能重写
Example类,因为它是 android 的一部分/一个封闭的框架。
标签: java inheritance reflection overriding extends