Java 中有类似 .NET 的
NotImplementedException
的东西吗?
Commons Lang 有它。或者你可以扔一个
UnsupportedOperationException
。
java.lang.UnsupportedOperationException
就是您正在寻找的。
你可以自己做(我就是这么做的)——为了不被异常处理所困扰,你只需扩展
RuntimeException
。你的类可能看起来像这样:
public class NotImplementedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public NotImplementedException(){}
}
您可以扩展它以获取消息 - 但如果您像我一样使用该方法(即提醒仍有一些东西需要实现),那么通常不需要额外的消息。
我敢说,我只使用这个方法,当我在开发系统的过程中,让我更容易不忘记哪些方法仍然没有正确实现:)
正如前面提到的,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
则表示(与收集合同一致)某些东西永远不会实施。这就是为什么我们的类名中有“yet”这个词。此外,IDE 可以轻松列出调用站点。import
行(不过 JDK 9 修复了这个问题)。不,不存在,也可能不存在,因为它的有效用途很少。在使用它之前我会三思而后行。而且,自己创建确实很容易。
请参阅此讨论了解为什么它甚至出现在 .NET 中。
我猜
UnsupportedOperationException
很接近,虽然它没有说该操作只是未实现,但甚至不受支持。这可能意味着不可能进行有效的实施。为什么该操作会不受支持?它应该存在吗?
也许是接口隔离或里氏替换问题?
如果它正在进行中,我会选择
ToBeImplementedException
,但我从来没有发现自己定义了一个具体的方法,然后将其放置了很长时间,以至于使其投入生产,并且需要这样的例外。
本着 Stackoverflow Reddit 和 Wikipedia 的结合的精神,这里有一些与问题相关的附加信息,也可以作为问题的答案。
当您要求 NetBeans IDE 创建缺失的实现时,它会使用 UnsupportedOperationException:
void setPropertiesWithReader(IDataReader rdr)
{
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
如果它对 NetBeans 足够好,那么对我们来说也足够好。