【问题标题】:Is it a good practise to remove a function instead of making it stay there with a deprecated annotation [closed]删除函数而不是使用已弃用的注释将其留在那里是一种好习惯[关闭]
【发布时间】:2014-10-07 12:12:59
【问题描述】:

所以我和一些人进行了长时间的争论,他们一直在为自己制定的代码约定而争吵。 据此,他们说,如果有一种方法可以让您在编写您认为应该弃用的内容时进行编码。您只需将其删除,在所有使用过的地方进行更改,通知其他人并让他们也更改他们的内容。

我的反问

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

期待

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

【问题讨论】:

  • stackoverflow 不是你解决争论的地方
  • 视情况而定。在新的开发中,您通常应该尽快删除非功能性代码,尽管与您的同事协调。但是,当您拥有一个被成千上万或数百万人使用的公共 API 时,您必须更加小心。
  • 无论哪种方式,都没有“事实”来支持这一点。这是基于经验、团队内的政策和常识做出的决定。
  • 如果您只是弃用该方法,人们将继续使用它。无论如何,他们无视警告——至少这是我的经验。删除方法 -> 强制大家适应 -> 明天有更好的代码。当然,我们说的是两端的in-house 代码。公共图书馆是完全不同的东西。

标签: java deprecated jls


【解决方案1】:

这可能适用于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 中显示为弹出窗口。

【讨论】:

    【解决方案2】:

    从我接触 Java 的那一刻起,我刚刚从好的来源看到了一个关于 Java 中已弃用的东西的子句,发现它完全有效,

    条款是


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

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

    在自己编写一些 api 的上下文中,您可能有自己的情况。

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 2013-03-30
      • 2016-11-30
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多