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

dev*_*ium 525 .net java exception

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

Rav*_*lau 503

Commons Lang有它.或者你可以扔一个UnsupportedOperationException.

  • 似乎已从Commons Lang 3.0中删除了NotImplementedException. (26认同)
  • 我认为,因为UnsupportedOperationException是集合框架的一部分,所以只有在集合的conext中使用它时才应该使用它.否则应使用RuntimeException.http://docs.oracle.com/javase/7/docs/technotes/guides/collections/index.html (12认同)
  • @LeonardButz它来自java.lang:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/UnsupportedOperationException.html (9认同)
  • @RaviWallau我看到了这个:http://docs.oracle.com/javase/7/docs/api/java/lang/UnsupportedOperationException.html这个类是Java Collection Framework的成员. (5认同)
  • 它已在Commons Lang 3.2中读过:http://commons.apache.org/proper/commons-lang/javadocs/api-3.2/ (3认同)

Chr*_*ail 280

我认为这java.lang.UnsupportedOperationException就是你要找的东西.

  • @Dykam:`new UnsupportedOperationException("尚未实现")` - 开心? (102认同)
  • 我说这是完全不同的东西.NIE还告诉它可能还没有实现,UOE说我永远不会...... (27认同)
  • new UnsupportedOperationException("尚未实现")是一个很棒的主意!在lang3中由于某种原因我没有NotImplementedException所以这是一个很好的解决方案 (6认同)
  • @Dykam,那么它不是NotImplementedYetException吗? (5认同)
  • 我并不是说情况更糟,只是有一个不同的用例. (3认同)
  • @Dykam在.NET中,`NotSupportedException`和`NotImplementedException`具有非常不同的含义.但是,在Java中,事实上的标准是在两种情况下都使用`UnsupportedOperationException`,并且消息指示该方法尚未实现(如果适用).即使您为自己的代码使用自定义`NotImplementedException`,也绝不能在Java中假设"UnsupportedOperationException"意味着"将不会"实现该方法. (2认同)
  • FWIW这就是Netbeans IDE实现自动生成方法的方式.实际上Netbeans还添加了一条注释:`throw new UnsupportedOperationException("尚不支持."); //要更改生成方法的主体,请选择"工具"| Templates.` (2认同)

Rea*_*oid 54

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

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}
Run Code Online (Sandbox Code Playgroud)

您可以扩展它以接收消息 - 但如果您像我一样使用该方法(即,作为提醒,仍有一些东西需要实现),那么通常不需要其他消息.

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

  • 我最喜欢这个解决方案,因为它很容易为它设置一个特殊的错误处理程序,通过查找对NotImplementedException构造函数的所有引用很容易搜索它,它只是几行代码.但是,必须使用自己的文件声明一个新类有点不方便. (3认同)

Dor*_*use 8

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

请参阅此讨论,了解为什么它甚至在.NET中.

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

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


Jen*_*ann 8

如前所述,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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法具有以下优点:

  1. 当读者看到时NotYetImplementedException,他们知道实施是已计划的,或者被遗忘或仍在进行中,而UnsupportedOperationException(根据收款合同)说,永远也不会实施。这就是为什么我们在类名中使用单词“ yet”的原因。而且,IDE可以轻松列出呼叫站点。
  2. 通过每个呼叫站点的弃用警告,您的IDE和静态代码分析工具可以提醒您仍然需要实现的地方。(这种弃用的使用对某些人来说可能是错误的,但实际上弃用不仅限于宣布删除。)
  3. 不建议使用构造函数,而不要使用类。这样,您只会在需要实现的方法内部收到不赞成使用的警告,而不是import在线上(尽管JDK 9 修复了此问题)。