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

Posted

技术标签:

【中文标题】Java中有没有类似.NET的NotImplementedException的东西?【英文标题】:Is there anything like .NET's NotImplementedException in Java? 【发布时间】:2011-01-20 17:22:14 【问题描述】:

在 Java 中有没有类似 .NET 的 NotImplementedException 的东西?

【问题讨论】:

【参考方案1】:

Commons Lang 有。或者你可以抛出一个UnsupportedOperationException

【讨论】:

似乎 NotImplementedException 已从 Commons Lang 3.0 中删除。 我认为由于 UnsupportedOperationException 是集合框架的一部分,因此只有在集合的上下文中使用它时才应该使用它。否则应使用 RuntimeException。 docs.oracle.com/javase/7/docs/technotes/guides/collections/… @LeonardButz 来自java.lang:docs.oracle.com/javase/1.5.0/docs/api/java/lang/… @RaviWallau 我看到了这个:docs.oracle.com/javase/7/docs/api/java/lang/… 这个类是 Java Collection Framework 的成员。 已在 Commons Lang 3.2 中读取:commons.apache.org/proper/commons-lang/javadocs/api-3.2【参考方案2】:

我认为java.lang.UnsupportedOperationException 是您正在寻找的。​​p>

【讨论】:

我说这是完全不同的东西。 NIE 还告诉它可能尚未实施,而 UOE 说它永远不会...... @Dykam,那不会是 NotImplementedYetException 吗? @Dykam: new UnsupportedOperationException("Not implemented yet") - 开心吗? 我并不是说情况更糟,只是有不同的用例。 new UnsupportedOperationException("Not implemented yet") 是个好主意! :) 在 lang3 中由于某种原因我没有 NotImplementedException 所以这是一个很好的解决方案【参考方案3】:

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

public class NotImplementedException extends RuntimeException 

    private static final long serialVersionUID = 1L;

    public NotImplementedException()

您可以扩展它以接收消息 - 但如果您像我一样使用该方法(也就是说,作为提醒,还有一些事情要实现),那么通常不需要额外的消息。

我敢说,我只使用这种方法,而我在开发系统的过程中,让我更容易不忘记哪些方法仍然没有正确实现:)

【讨论】:

我最喜欢这个解决方案,因为它很容易有一个特殊的错误处理程序,很容易通过找到对 NotImplementedException 构造函数的所有引用来搜索它,而且它只是几行代码。但是必须用自己的文件声明一个新类有点不方便。 我同意。在我看来,这比使用UnsupportedOperationException 更好。现在,如果只有 Java 将其添加到通用异常库中! 其实UnsupportedOperationException也继承了RuntimeException,并且支持可选消息。【参考方案4】:

如前所述,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 可以轻松列出调用站点。 通过每个调用站点的弃用警告,您的 IDE 和静态代码分析工具可以提醒您仍然需要在哪些地方实现某些东西。 (有些人可能会觉得这种弃用的用法是错误的,但事实上deprecation is not limited to announcing removal。) 不推荐使用构造函数,而不是类。这样,您只会在需要实现的方法内收到弃用警告,而不是在 import 行(不过,JDK 9 fixed this)。

【讨论】:

【参考方案5】:

不,不存在,也可能不存在,因为它的有效用途很少。在使用它之前我会三思而后行。而且,自己创建确实很容易。

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

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

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

【讨论】:

以上是关于Java中有没有类似.NET的NotImplementedException的东西?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 VB.Net 中突出显示 If - End If 语句

尝试在 MySQL 中连接时出现 java.net.ConnectException [重复]

在 xUnit.net 中测试参数化,类似于 NUnit

vb.net 中有没有类似与 c# 的 typeof(String) 的方法

HP QTP (VbScript):使用 Java 对象(如 .NET 类的 DotNetFactory)

JAVA之路