52

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


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

4

2 回答 2

67

大概IllegalStateException

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

For IllegalStateException:“表示方法已在非法或不适当的时间被调用。换句话说,Java 环境或 Java 应用程序未处于请求操作的适当状态。”

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


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

于 2010-07-02T12:44:06.520 回答
4

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.
}

因此,在这种情况下,您可以使用 IllegalStateException,尽管它说:

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

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

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

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

   // add constructors with call to super as needed

}

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

于 2010-07-02T13:24:03.920 回答