我正在使用一个库,我想在其中一种方法上实现监听器。我的想法是扩展类并重写该方法,但看来我不能,因为该方法是最终的(它的行为似乎与静态方法类似)。
如何在 Java 中实现实例的 final方法的监听器?
这是一个演示我的问题的示例:
public interface Listener {
void somethingHappened();
}
<小时/>
public class Original {
public final void override() {
System.out.println("original");
}
}
<小时/>
public class Copy extends Original {
private List<Listener> listeners = new ArrayList<Listener>();
public void addListener(Listener toAdd) {
listeners.add(toAdd);
}
@Override
public void override() { // offensive line: "Cannot override the final method from Original"
System.out.println("copy");
if (listener != null) {
for (Listener listener : listeners) {
listener.somethingHappened();
}
}
}
}
<小时/>
我知道无法覆盖 final方法(这就是错误消息所说的内容)。我正在寻找替代方案。
此外,如果可能的话,我想避免修改 Original
类,因为它是外部库的一部分,并且 fork 它(假设这是可能的)意味着维护它。
最佳答案
Java 中的 Final 方法旨在表明它不能被重写。所以理想情况下你不应该试图覆盖它。通常,如果您必须这样做,您可能需要重新考虑如何构建代码。
如果您想实现监听器,则取决于您是否确实需要从 Original
扩展的 Copy
(即您确实需要使用它来代替 Original
) - 如果没有,那么您可以简单地在 Copy
类上实现接口(interface),或者拥有一个实现该接口(interface)的包装类。
关于java - 如何在Java中实现实例的final方法的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35544771/