Java中有没有类似。net 's NotImplementedException的东西?

Java中有类似。net的NotImplementedException的东西吗?

182429 次浏览

我认为java.lang.UnsupportedOperationException就是你要找的。

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

public class NotImplementedException extends RuntimeException {


private static final long serialVersionUID = 1L;


public NotImplementedException(){}
}

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

我敢说,我只使用这种方法,当我在开发一个系统的过程中,使我更容易不失去跟踪哪些方法仍然没有正确实现:)

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

请参考这个讨论了解为什么它甚至在。net中。

我想UnsupportedOperationException很接近,尽管它没有说操作只是没有实现,但甚至不支持。这可能意味着不可能有有效的实现。为什么该操作不受支持?它应该在那里吗? 界面隔离或利斯科夫替换问题?< / p >

如果它是正在进行的工作,我会选择ToBeImplementedException,但我从来没有发现自己定义了一个具体的方法,然后把它放在生产中太长时间,以至于需要这样的例外。

如前所述,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 固定的这)。

本着Stackoverflow是Reddit和维基百科的结合的精神,这里有一些与问题相关的附加信息,也可以是问题的答案。

当你要求NetBeans IDE创建一个缺失的实现时,它使用< >强UnsupportedOperationException < / >强方式:

void setPropertiesWithReader(IDataReader rdr)
{
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}

如果它对NetBeans足够好,对我们也足够好。