Есть ли эквивалент Java С# InvalidOperationException?
Я конвертирую код С# в Java, и мне нужно включить исключение, подобное С# InvalidOperationException. Существует ли такая вещь? Также есть список эквивалентных типов исключений на двух языках? Благодарю.
Я думаю, что в моем конкретном случае IllegalStateException наиболее подходит. Спасибо за все ответы.
Ответы
Ответ 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
.