移除函数是一个好习惯,而不是使用不推荐的注释使其保留在那里

时间:2014-10-07 12:13:00

标签: java deprecated jls

所以我与一些人进行了长时间的争论,并且他们一直在争论他们自己的代码约定。 根据它,他们说如果有一种方法,你在编写你认为它应该被弃用的东西。你只需删除它,改变它已被使用的地方,通知其他人,让他们也改变他们的东西。

我的反问题

如果java人只是删除了Date类而不是弃用它,那么他们会不同意。

期望

即使我错了,我也希望对事实有一个很好的解释。 一些额外的事实或链接会很棒。

2 个答案:

答案 0 :(得分:2)

这可能适用于Programmers

如果您正在制作其他人使用的库,则新版本不应打破现有代码。只有经过重大修订后,例如从3.8.7到4.0,您可能需要用户重新编码。请注意,其他错误修复可能会进行分支,后端移植到新的3.8.8。

请注意其他人可能还会使用其他库,这些库也会使用您的库。因此,向后兼容意味着人们可以升级而无需等待升级使用您库的库。

对于本地公司的内部库,删除旧的API可能更具吸引力,确保公司中的每个人都切换到新代码。

@Deprecated本地仍有一些用途:

我曾经有一个带有long参数的方法,在新版本中会Object。我是在图书馆做到的:

/**
 * Please replace the long parameter with the Object ...
 */
@Deprecated
public boolean f(long x) { ... }

public boolean f(Object x) { ... }

除了新功能中的丑陋if (x instanceof Long) { return fOld(((Long)x).longValue()); }外,删除旧版本对于所有库使用都是致命的。

因此,弃用可能会提供有关替换呼叫的内容的javadoc信息。通常在IDE中显示为弹出窗口。

答案 1 :(得分:1)

从现在开始使用Java,我刚刚看到一篇关于java中被弃用的东西的条款,并且发现它完全有效,

条款是


然而,从'X'版本的java这个'abc'功能因为'xyz'原因而被弃用,但是你可能在你的职业生涯中遇到了一些旧代码,所以对它有所了解是一件好事

但是,这是一个非常罕见的案例,Java人员必须通过将任何内容标记为已弃用来删除某些东西。不赞成使用的标志只是说它不应该在将来使用。 如果考虑与向后兼容性相关的问题,它也是有效的。

在自己写一些api的背景下,你可能有自己的情况。