¿Hay algo como la excepción NotImplementedException de .NET en Java?

Respuestas:

516

Commons Lang lo tiene. O podrías lanzar un UnsupportedOperationException.

Ravi Wallau
fuente
26
Parece que NotImplementedException se ha eliminado de Commons Lang 3.0.
Michael Younkin
13
Creo que dado que UnsupportedOperationException es parte del marco de colecciones, solo debería usarse si se usa en el texto de Colecciones. De lo contrario, se debe utilizar una RuntimeException. docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz
99
@LeonardButz Viene de java.lang: docs.oracle.com/javase/1.5.0/docs/api/java/lang/…
Ravi Wallau
55
@RaviWallau Vi esto: docs.oracle.com/javase/7/docs/api/java/lang/… Existe la posibilidad de que esta clase sea miembro de Java Collection Framework.
L.Butz
3
Se ha leído en Commons Lang 3.2: commons.apache.org/proper/commons-lang/javadocs/api-3.2
qwertzguy el
289

Creo que java.lang.UnsupportedOperationExceptiones lo que estás buscando.

Chris Dail
fuente
28
Yo digo que es algo muy diferente. El NIE también dice que aún no se ha implementado, donde la UOE me dice que nunca lo hará ...
Dykam
55
@Dykam, entonces, ¿no sería una excepción NotImplementedYetException?
Yishai
106
@Dykam: new UnsupportedOperationException("Not implemented yet")¿feliz?
Michael Borgwardt
3
No quise decir que era peor, solo tenía un caso de uso diferente.
Dykam
66
¡La nueva UnsupportedOperationException ("No implementado todavía") es una idea increíble! :) en lang3 por alguna razón no tengo NotImplementedException así que esta es una gran solución
ufk
55

Puede hacerlo usted mismo (eso es lo que hice): para no molestarse con el manejo de excepciones, simplemente extienda RuntimeException, su clase podría verse así:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Puede extenderlo para tomar un mensaje, pero si usa el método como lo hago yo (es decir, como recordatorio, que todavía hay algo que implementar), entonces generalmente no hay necesidad de mensajes adicionales.

Me atrevo a decir que solo uso este método, mientras estoy en el proceso de desarrollo de un sistema, me hace más fácil no perder de vista qué métodos todavía no se implementan correctamente :)

Ready4Android
fuente
3
Esta solución me gusta más porque es fácil tener un controlador de errores especial, es fácil buscarla al encontrar todas las referencias al constructor NotImplementedException y son solo unas pocas líneas de código. Pero es un poco incómodo tener que declarar una nueva clase con su propio archivo.
D Coetzee
1
Estoy de acuerdo. Esto es mejor que el uso UnsupportedOperationExceptionen mi opinión. ¡Ahora, si Java añadiera esto a la biblioteca común de excepciones!
aplastar
12

Como se mencionó, el JDK no tiene una coincidencia cercana. Sin embargo, mi equipo ocasionalmente tiene un uso para tal excepción también. Podríamos haber ido UnsupportedOperationExceptionsegún lo sugerido por otras respuestas, pero preferimos una clase de excepción personalizada en nuestra biblioteca base que ha desaprobado constructores:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

Este enfoque tiene los siguientes beneficios:

  1. Cuando los lectores ven NotYetImplementedException, saben que se planificó una implementación y se olvidó o aún está en progreso, mientras que UnsupportedOperationExceptiondice (en línea con los contratos de cobro ) que algo nunca se implementará. Es por eso que tenemos la palabra "todavía" en el nombre de la clase. Además, un IDE puede enumerar fácilmente los sitios de llamadas.
  2. Con la advertencia de desaprobación en cada sitio de llamadas, su IDE y la herramienta de análisis de código estático pueden recordarle dónde aún debe implementar algo. (Este uso de desaprobación puede parecer incorrecto para algunos, pero de hecho la desaprobación no se limita a anunciar la eliminación ).
  3. Los constructores están en desuso, no la clase. De esta manera, solo obtienes una advertencia de desaprobación dentro del método que debe implementarse, no en la importlínea (JDK 9 solucionó esto , sin embargo).
Jens Bannmann
fuente
8

No, no lo hay y probablemente no esté allí, porque tiene muy pocos usos válidos. Lo pensaría dos veces antes de usarlo. Además, es realmente fácil crearse.

Consulte esta discusión sobre por qué está incluso en .NET.

Supongo que UnsupportedOperationExceptionse acerca, aunque no dice que la operación simplemente no está implementada, sino que incluso no es compatible. Eso podría implicar que no es posible una implementación válida. ¿Por qué la operación no sería compatible? ¿Debería estar allí? ¿Segregación de interfaz o problemas de sustitución de Liskov tal vez?

Si se trata de un trabajo en progreso, iría ToBeImplementedException, pero nunca me he dado cuenta de que definí un método concreto y luego lo dejé por tanto tiempo que llega a la producción y sería necesario hacer tal excepción.

Lirón
fuente