Подтвердить что ты не робот

Есть ли эквивалент Java С# InvalidOperationException?

Я конвертирую код С# в Java, и мне нужно включить исключение, подобное С# InvalidOperationException. Существует ли такая вещь? Также есть список эквивалентных типов исключений на двух языках? Благодарю.


Я думаю, что в моем конкретном случае IllegalStateException наиболее подходит. Спасибо за все ответы.
4b9b3361

Ответ 1

Возможно IllegalStateException.

Из того, что я прочитал о InvalidOperationException: "Исключение, которое вызывается, когда вызов метода недействителен для текущего состояния объекта".

Для IllegalStateException: "Сигналы о том, что метод был вызван в незаконное или ненадлежащее время. Другими словами, среда Java или приложение Java не находятся в соответствующем состоянии для запрошенной операции".

В зависимости от того, как вы используете InvalidOperationException, я также мог видеть IllegalArgumentException и UnsupportedOperationException - это то, что вы хотите. Первое подразумевает, что, в общем, метод хорошо назвать, на этот раз он просто перешел на мусор; последнее подразумевает, что метод никогда не подходит для вызова этого экземпляра (в отличие от IllegalStateException, что подразумевает, что было бы целесообразно называть метод объекта иногда, просто не в данный момент).


Мне не известно об общем перечне исключений из С# <= > Java.

Ответ 2

Петар указал мне на этот пример кода (из 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, хотя он говорит:

Брошено, когда действие предпринимается в то время, когда виртуальная машина не находится в правильном состоянии.

И незаконное состояние виртуальной машины определенно не является проблемой в приведенном выше примере ссылки. Здесь проблема в том, что объект недопустим, поскольку он ссылается на файл журнала только для чтения.

Мой собственный совет: просто определите настраиваемое исключение, например

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

   // add constructors with call to super as needed

}

Для меня это намного проще, чем пытаться найти лучший вариант Exception из пакета java.lang.