在Java中有类似.NET的NotImplementedException吗?

时间:2010-02-24 20:44:29

标签: java .net exception

在Java中有什么类似.NET的NotImplementedException吗?

5 个答案:

答案 0 :(得分:491)

Commons Lang有它。或者您可以抛出UnsupportedOperationException

答案 1 :(得分:275)

我认为java.lang.UnsupportedOperationException正是您所寻找的。

答案 2 :(得分:53)

你可以自己做(这就是我所做的) - 为了不被异常处理所困扰,你只需扩展RuntimeException,你的类看起来像这样:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

你可以扩展它以接收消息 - 但是如果你像我一样使用这个方法(也就是提醒一下,还有一些东西需要实现),那么通常不需要额外的消息。 / p>

我敢说,我只使用这种方法,而我正在开发系统,让我更容易忘记哪些方法仍未正确实现:)

答案 3 :(得分:8)

没有,它可能不存在,因为它的有效用途非常少。在使用之前我会三思。此外,创建自己确实很容易。

请参阅this discussion,了解为什么它甚至在.NET中。

我猜UnsupportedOperationException接近,虽然它没有说操作没有实现,但是甚至不支持。这可能意味着无法实现有效的实施。为什么不支持该操作?它应该在那吗? 接口隔离或Liskov替换问题可能?

如果它正在进行中,我会选择ToBeImplementedException,但我从未发现自己定义了一个具体的方法,然后将它保留了很长时间才使其投入生产,并且需要这样的例外。

答案 4 :(得分:5)

如上所述,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);
    }
}

这种方法有以下好处:

  1. 当读者看到NotYetImplementedException时,他们知道某个实施计划已被遗忘或仍在进行中,而UnsupportedOperationException表示(与collection contracts一致)某些内容永远不会实施。这就是为什么我们在班级名称中有“尚未”这个词。此外,IDE可以轻松列出呼叫站点。
  2. 通过每个呼叫站点的弃用警告,您的IDE和静态代码分析工具可以提醒您仍需要实施的内容。 (这种使用弃用可能会让一些人觉得不对,但事实上deprecation is not limited to announcing removal。)
  3. 不推荐使用构造函数,而不是类。这样,您只需要在需要实现的方法内获得弃用警告,而不是import行(JDK 9 fixed this)。