2010-07-02 9 views
41

Estoy convirtiendo algún código C# en Java y necesito incluir una excepción que sea similar a la InvalidOperationException de C#. ¿Existe tal cosa? ¿También hay una lista de tipos de excepción equivalentes en los dos idiomas? Gracias. ¿Hay un equivalente Java de InvalidOperationException de C#?


Creo que en mi caso particular IllegalStateException es el más apropiado. Gracias por todas las respuestas.

+0

En Java sería más un error que una excepción ... Esa es la forma en que la JVM nos dice que algo salió terriblemente mal. –

+0

@Andreas_D - ¿Qué quieres decir :) No puedo conectar tu publicación a la pregunta. –

+1

@Petar: en Java tenemos dos tipos de Throwables: errores y excepciones. Los errores generalmente son arrojados por la máquina virtual. Mi comprensión de la IOE es que la máquina virtual detecta que no se puede ejecutar un método. Supongo que en Java tendrías que modificar el bytecode cargado en tiempo de ejecución para tener este efecto, mientras que en C#, un dll colapsado o descargado podría conducir a esta excepción, y en este caso, la JVM se quejaría, con un error. –

Respuesta

53

Probablemente IllegalStateException.

De lo que leí sobre InvalidOperationException: "La excepción que se produce cuando una llamada al método no es válida para el estado actual del objeto."

Para IllegalStateException: "Indica que un método ha sido invocado en un momento ilegal o inapropiado. En otras palabras, el entorno Java o la aplicación Java no se encuentran en un estado apropiado para la operación solicitada".

Dependiendo de cómo esté usando InvalidOperationException, también pude ver que IllegalArgumentException y UnsupportedOperationException es lo que desea. Lo primero implica que, en general, el método está bien para llamar, esta vez se pasó basura; esto último implica que el método es nunca apropiado para llamar para esta instancia (a diferencia de IllegalStateException, lo que implica que a veces podría ser apropiado llamar al método del sujeto, solo que no por el momento).


No estoy al tanto de un general C# < traducción => Java de excepciones.

+0

+1 Eso es casi una coincidencia directa. (El nombre de la excepción .Net no es muy bueno, ¿verdad?) –

+0

@ T.J .: Me gusta el nombre de .Net, especialmente si se combinó con la denominación 'UnsupportedOperationException'. Creo que esos dos nombres podrían usarse para comunicar la distinción a veces vs siempre entre los dos. El equivalente de .Net de una 'UnsupportedOperationException' (lo señalo en mi comentario sobre su respuesta) es * okay * name-wise (' NotSupportedException'), pero ambos lenguajes hicieron parejas de los dos tipos, IMO. – Carl

+0

+1 Un estado ilegal provoca una operación no válida. Muy lógico :) –

3

Petar me señaló a este código de ejemplo (de MSDN)

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

Así que en este contexto se podría utilizar un IllegalStateException, aunque se dice:

inicia cuando una acción se trató en una momento en que la máquina virtual no está en el estado correcto.

Y un estado de VM ilegal definitivamente no es el problema en el ejemplo de referencia anterior. Aquí, el problema es que el objeto no es válido porque hace referencia a un archivo de registro de solo lectura.

Mi propio consejo: acaba de definir una excepción personalizada como

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

    // add constructors with call to super as needed 

} 

Para mí, eso es mucho más fácil que tratar de encontrar la mejor Excepción apropiado del paquete java.lang.

+0

Sin embargo, esto lastima la interoperabilidad. Si puede encontrar una excepción estándar que se adecue, la creación de otras nuevas de todas maneras hará que cada biblioteca defina la suya propia. Es bueno tener el conocimiento reutilizable de los tipos de excepciones 'java.lang', lo que significan, etc. – BAF

Cuestiones relacionadas