【发布时间】:2011-01-20 17:22:14
【问题描述】:
在 Java 中有没有类似 .NET 的 NotImplementedException 的东西?
【问题讨论】:
在 Java 中有没有类似 .NET 的 NotImplementedException 的东西?
【问题讨论】:
Commons Lang 有。或者你可以抛出一个UnsupportedOperationException。
【讨论】:
我认为java.lang.UnsupportedOperationException 是您正在寻找的。p>
【讨论】:
new UnsupportedOperationException("Not implemented yet") - 开心吗?
你可以自己做(我就是这么做的)——为了不被异常处理所困扰,你只需扩展 RuntimeException,你的类可能看起来像这样:
public class NotImplementedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public NotImplementedException(){}
}
您可以扩展它以接收消息 - 但如果您像我一样使用该方法(也就是说,作为提醒,还有一些事情要实现),那么通常不需要额外的消息。
我敢说,我只使用这种方法,而我在开发系统的过程中,让我更容易不忘记哪些方法仍然没有正确实现:)
【讨论】:
UnsupportedOperationException 更好。现在,如果只有 Java 将其添加到通用异常库中!
UnsupportedOperationException也继承了RuntimeException,并且支持可选消息。
如前所述,JDK 没有紧密匹配。但是,我的团队偶尔也会使用这种异常。正如其他答案所建议的那样,我们本可以使用UnsupportedOperationException,但我们更喜欢在我们的基础库中使用一个自定义异常类,该类具有已弃用的构造函数:
public class NotYetImplementedException extends RuntimeException
{
/**
* @deprecated Deprecated to remind you to implement the corresponding code
* before releasing the software.
*/
@Deprecated
public NotYetImplementedException()
{
}
/**
* @deprecated Deprecated to remind you to implement the corresponding code
* before releasing the software.
*/
@Deprecated
public NotYetImplementedException(String message)
{
super(message);
}
}
这种方法有以下好处:
NotYetImplementedException 时,他们知道某个实施已计划好被遗忘或仍在进行中,而UnsupportedOperationException 则表示(与collection contracts 一致)某些东西永远不会实施。这就是为什么我们在类名中有“yet”这个词。此外,IDE 可以轻松列出调用站点。import 行(不过,JDK 9 fixed this)。【讨论】:
不,不存在,也可能不存在,因为它的有效用途很少。在使用它之前我会三思而后行。而且,自己创建确实很容易。
请参阅this discussion 了解为什么它甚至在 .NET 中。
我猜UnsupportedOperationException 接近了,虽然它没有说操作只是没有实现,但甚至不受支持。这可能意味着没有有效的实现是可能的。为什么不支持该操作?它甚至应该在那里吗?
可能是接口隔离或 Liskov 替换问题?
如果它正在进行中,我会选择ToBeImplementedException,但我从来没有发现自己定义了一个具体的方法,然后将其放置很长时间,使其投入生产,并且需要这样的例外.
【讨论】: