Java中是否有类似.NET的NotImplementedException的东西?


Answers:


516

下议院郎有它。或者你可以扔一个UnsupportedOperationException


26
似乎NotImplementedException已从Commons Lang 3.0中删除。
迈克尔·尤金

13
我认为,由于UnsupportedOperationException是collections框架的一部分,因此只有在Collections的conext中使用它时才应使用它。否则,应使用RuntimeException。docs.oracle.com/javase/7/docs/technotes/guides/collections/...
L.Butz


5
@RaviWallau我看到了这样的文件:docs.oracle.com/javase/7/docs/api/java/lang/…显然,该类是Java Collection Framework的成员。
L.Butz

3
它已在Commons Lang 3.2中读取
qwertzguy 2015年

289

我觉得 java.lang.UnsupportedOperationException是您想要的。


28
我说那是完全不同的东西。NIE还告诉它可能尚未实施,UOE告诉我它永远不会...
Dykam 2010年

5
@Dykam,那不是NotImplementedYetException吗?
Yishai'2

106
@Dykam:new UnsupportedOperationException("Not implemented yet")-快乐吗?
Michael Borgwardt 2010年

3
我并不是说情况变得更糟,只是有一个不同的用例。
Dykam'2

6
新的UnsupportedOperationException(“尚未实现”)是一个很棒的主意!:)在lang3中由于某种原因我没有NotImplementedException,所以这是一个很好的解决方案
ufk 2011年

55

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

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

您可以将其扩展为接收一条消息-但是,如果您像我一样使用该方法(即提醒一下,仍然有一些事情要实现),那么通常就不需要其他消息。

我敢说,在开发系统的过程中,我只使用此方法,这使我更容易了解那些仍未正确实施的方法:)


3
我最喜欢此解决方案,因为它很容易拥有一个特殊的错误处理程序,可以通过查找对NotImplementedException构造函数的所有引用来轻松进行搜索,并且只有几行代码。但是必须用自己的文件声明一个新类有点不方便。
D Coetzee 2012年

1
我同意。UnsupportedOperationException我认为这比使用更好。现在,如果只有Java会将其添加到通用异常库中!
暗恋

12

如前所述,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表示(与托收合同一致))说将永远不会实施。这就是为什么我们在类名中使用单词“ yet”的原因。而且,IDE可以轻松列出呼叫站点。
  2. 通过每个呼叫站点的弃用警告,IDE和静态代码分析工具可以提醒您仍然需要实现的地方。(这种弃用的使用对某些人来说可能是错误的,但实际上弃用不仅限于宣布删除。)
  3. 不建议使用构造函数,而不要使用类。这样,您只会在需要实现的方法内部收到不赞成使用的警告,而不是import在线(尽管JDK 9 修复了此问题)。

8

不,那里不存在,可能不在那里,因为几乎没有有效的用途。在使用它之前,我会三思而后行。同样,创建自己确实很容易。

请参考有关为什么它甚至在.NET中的讨论

我想UnsupportedOperationException接近了,尽管它没有说该操作尚未实现,甚至不受支持。那可能意味着没有有效的实现方法。为什么不支持该操作?它应该在那里吗?接口隔离或Liskov替代问题?

如果它还在进行中,那么我会继续努力ToBeImplementedException,但是我从来没有发现自己要定义一个具体的方法,然后将其放置很长时间才使它投入生产,因此需要这样的例外。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.