我想弃用一种特定的方法.现在,此方法需要一个新的参数,但我想保留以前的实现以实现向后兼容.
是否应该仅在超类(在library-api项目中),子类(在library-impl项目中)或两者上都添加@Deprecated批注?
解决方法:
@Deprecated
注释未使用@Inherited
进行注释.因此,该注释将不会自动应用于继承的方法.
这不一定是问题,因为通常IDE会根据声明的类型进行检查.因此,如果您在超类/接口上弃用该方法,则即使您使用未明确弃用该方法的子类/实现,IDE也会抱怨.我的意思是:
SomeType x = new Abc(); // where Abc is an implementation or subclass of SomeType
x.doSomething(); // IDE should still complain if SomeType#doSomething() is deprecated
如果使用实现者/子类而不是接口/超类进行类型声明,则可能需要在实现/重写方法上使用@Deprecated批注.虽然在很大程度上取决于代码分析器.从理论上讲,即使您不将其用于类型声明,它仍然可以检查接口/超类是否已弃用.
Abc x = new Abc();
x.doSomething(); // here you're on your own if Abc#doSomething() is not deprecated