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

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

【问题讨论】:

    标签: java .net exception


    【解决方案1】:

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

    【讨论】:

    【解决方案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);
        }
    }
    

    这种方法有以下好处:

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

    【讨论】:

      【解决方案5】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-04-07
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        相关资源
        最近更新 更多