Вероятно IllegalStateException
.
Из того, что я читал об InvalidOperationException: «Исключение, которое выдается, когда вызов метода недопустим для текущего состояния объекта».
Для IllegalStateException
: «Сигнализирует, что метод был вызван в недопустимое или неподходящее время. Другими словами, среда Java или приложение Java не находится в подходящем состоянии для запрошенной операции. "
В зависимости от того, как вы используете InvalidOperationException
, я также мог видеть IllegalArgumentException
и UnsupportedOperationException
- это то, что вы хотите. Первое подразумевает, что в целом метод можно вызывать, на этот раз он был просто передан мусором; последнее подразумевает, что метод никогда не подходит для вызова этого экземпляра (в отличие от IllegalStateException
, что подразумевает, что может быть уместно вызывать метод объекта иногда, но не в данный момент) .
Мне неизвестен общий перевод исключений на C # <=> Java.
Петар указал мне на этот пример кода (из 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
}
. Для меня это намного проще, чем пытаться найти наиболее подходящее исключение из пакета java.lang
.