【问题标题】:Mark method as should never be used将方法标记为永远不应该使用
【发布时间】:2016-12-13 16:22:46
【问题描述】:

我想知道在 java 中是否有一些好的方法来表明某些方法永远不应该被调用?我在考虑如果我与更大的团队一起工作,并告诉大家这个方法永远不会被调用,所以不要尝试测试它。也许断言是个好主意?

上下文:我在java中使用ReactiveX,我的Observable永远不会停止,它只能调用onError和onNext,但永远不会调用onCompleted,但我的观察者扩展了订阅者,所以我需要@Override onCompleted。

【问题讨论】:

  • @Deprecated 注释。
  • 你不能直接删除方法或抛出 UnsupportedOperationException 吗?
  • 但@Deprecated 应该与旧方法一起使用,我认为这只是为了向后兼容。这就是为什么我要问一个好的方法来告诉这个方法永远不会在程序中被调用,而不是它不应该被调用
  • @BretC 我需要实现这个,因为我扩展了 Observer 类。 UnsupportedOperationException 对我来说似乎是合理的

标签: java reactivex


【解决方案1】:

@Deprecated 是最接近标准的东西,在许多类似的情况下,抛出UnsupportedOperationException 是合理的做法。

还要注意,由于多态性,调用者很可能直到运行时才知道他们正在调用的Observer 的具体类型,因此没有注释可以提供帮助。

但是,在您描述的情况下,我认为您应该编写一个空的 onCompleted() 实现和一个仅断言它不会引发异常的测试。虽然你已经决定 Observable 永远不会停止生产,但如果有一天它会抛出异常似乎是不合理的。

【讨论】:

  • 我认为更好的测试是测试它应该抛出一个异常,以确保与我的 Observable 永不停止生产元素的合同得以保留。如果有人更改它,那么测试将不会进行,我们会知道有人试图违约。
【解决方案2】:

如果您不希望其他人调用该方法,请使用 @Deprecated 注释和适当的 java 文档。
请注意,这只是给调用者的一个指示,尽管他们仍然可以调用该方法。

【讨论】:

  • 正如我在问题下方的评论中所写,我不喜欢在这种情况下使用 Deprecated
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2010-09-12
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多