场景:
Java 1.6
class Animal {
private String name;
...
public String getName() { return name; }
...
}
class CatDog extends Animal {
private String dogName;
private String catName;
...
public String getDogName() { return dogName; }
public String getCatName() { return catName; }
public String[] getNames() { return new String[]{ catName, dogName }; }
...
public String getName() { return "ERROR! DO NOT USE ME"; }
}问题:
getName没有任何意义,不应该在本例中使用。我正在读关于@Deprecated注解的文章。有没有更合适的注解方法?
问题:
A)在使用此函数时(在运行前)是否有可能强制执行错误?
B)有没有办法显示我将使用的注释方法的自定义警告/错误消息?理想情况下,当用户将鼠标悬停在已弃用/错误函数上时。
发布于 2012-07-13 10:37:16
通常,对于新版本的软件已经过时的方法,可以使用@Deprecated,但为了与依赖于旧版本的代码保持API兼容性,可以保留这些方法。我不确定它是否是在此场景中使用的最佳标记,因为Animal的其他子类仍在积极使用getName,但它肯定会提醒CatDog类的用户,他们不应该调用该方法。
如果您希望在使用该函数时在编译时导致错误,则可以更改编译器选项,将@Deprecated方法的使用视为错误,而不是警告。当然,你不能保证每个使用你的库的人都会设置这个选项,而且据我所知,也没有办法仅仅根据语言规范来强制编译错误。从CatDog中删除该方法仍然允许客户端调用它,因为客户端将只调用超类Animal的默认实现(假设您仍然希望包含该方法)。
但是,当用户将鼠标悬停在已弃用的方法上时,当然可以显示自定义消息。Javadoc @deprecated标记允许您指定方法被弃用的原因的解释,当用户将鼠标悬停在Eclipse等IDE中的方法上时,它将弹出,而不是通常的方法描述。它看起来像这样:
/**
*
* @deprecated Do not use this method!
*/
@Deprecated
public String getName() {
throw new UnsupportedOperationException();
}(请注意,您可以让您的方法实现抛出一个异常,以保证如果用户在编译时没有注意到@Deprecated标记,他们肯定会在运行时注意到它)。
发布于 2012-07-13 10:25:48
弃用意味着该方法不应该再使用,并且可能会在未来的版本中删除。基本上就是你想要的。
是的,当有人尝试使用该方法时,有一种非常简单的方法可以获得编译错误:删除该方法-这将在链接时对任何试图使用它的代码造成错误,由于显而易见的原因,通常不建议这样做,但如果真的有充分的理由破坏向后兼容性,这是实现它的最简单的方法。您也可以使方法签名不兼容(总是可能的),但实际上最简单的解决方案通常是最好的。
如果当有人将鼠标悬停在方法上时,您想要自定义消息,请使用javadoc,这正是它的作用所在:
/**
* @deprecated
* explanation of why function was deprecated, if possible include what
* should be used.
*/发布于 2019-12-09 17:52:43
重构User类后,我们无法删除userGuid属性,因为它被移动应用程序使用。因此,我已将其标记为已弃用。好消息是像IntellijIdea这样的开发工具可以识别它并显示消息。
public User {
...
/**
* @Deprecated userGuid equals to guid but SLB mobile app is using user_guid.
* This is going to be removed in the future.
*/
@Deprecated
public String getUserGuid() {
return guid;
}
}

https://stackoverflow.com/questions/11463271
复制相似问题