如何表示超类的最终方法已经过时?
背景: 在扩展JavaFX API时,我们面临几个禁止我们随意更改的final方法。 有时这是必需的,我找到的唯一合适的解决方案是创建一个附加方法。在这种情况下,废弃A提供的方法将使程序员意识到存在不同的替代方法。
包装对象不是可行的选择,因为多态性需要继承。
//Class a out of my control
class A{
public final void foo(){
...
}
}
class B extends A{
public void fooAlternative(){...}
//deprecate foo?
}
背景: 在扩展JavaFX API时,我们面临几个禁止我们随意更改的final方法。 有时这是必需的,我找到的唯一合适的解决方案是创建一个附加方法。在这种情况下,废弃A提供的方法将使程序员意识到存在不同的替代方法。
包装对象不是可行的选择,因为多态性需要继承。
A类
吗? - JohannesAWrapper
而不需要扩展A
。所有方法将具有与A
相同的方法名称和签名,并且将简单地委托给A
的方法。foo
方法将被注释为@Deprecated
,并且我个人甚至会抛出一个AssertionError
... 我不明白这如何影响你的多态性。 - EugeneA
是一些JavaFX模型/组件,其方法由其他框架模型/组件调用。您想通过重写方法来装饰它的行为,但这是不可能的,因为这些方法是final
的,所以您决定实现fooAlternative()
,但框架无法调用“替代”方法。那么这些“替代”方法的用例是什么? - matoni