有没有一个 Java 等同于 C# 的 InvalidOperationException?

我正在将一些C#代码转换为Java,我需要包含一个类似于C#的ValidOperationException的异常。这样的事情存在吗?另外,这两种语言中是否有等效异常类型的列表?谢谢。


我认为在我的特殊情况下,IllegalStateException是最合适的。感谢您的所有回复。

答案 1

可能是 IllegalStateException

从我读到的关于 InvalidOperationException 的内容来看:“当方法调用对于对象的当前状态无效时引发的异常。

对于 :“在非法或不适当的时间调用方法的信号。换句话说,Java 环境或 Java 应用程序处于适合请求操作的状态。IllegalStateException

根据你使用的方式,我还可以看到 IllegalArgumentExceptionUnsupportedOperationException 是你想要的。前者暗示,一般来说,该方法可以调用,这次只是传递垃圾;后者意味着该方法永远不适合调用此实例(与 不同,这意味着有时调用主题方法可能是合适的,只是目前不合适)。InvalidOperationExceptionIllegalStateException


我不知道一般的c#<=>Java翻译的异常。


答案 2

Petar向我指出了这个示例代码(来自msdn)

void WriteLog()
{
    if (!this.logFile.CanWrite)
    {
        throw new System.InvalidOperationException("Logfile cannot be read-only");
    }
    // Else write data to the log and return.
}

因此,在这种情况下,您可以使用非法状态异常,尽管它说:

在虚拟机未处于正确状态时尝试操作时引发。

在上面的参考示例中,非法的 VM 状态绝对不是问题所在。这里的问题是该对象无效,因为它引用了只读日志文件。

我自己的建议:只需定义一个自定义异常,例如

package com.pany.project;
public class InvalidOperationException extends RuntimeException {

   // add constructors with call to super as needed

}

对我来说,这比尝试从包装中找到最合适的异常要容易得多。java.lang