¿Cuál es la excepción estándar para agregar Java para operaciones no compatibles / implementadas?

308

En particular, ¿hay una Exceptionsubclase estándar utilizada en estas circunstancias?

Krishna Kumar
fuente
¿Es apropiado usarlo cuando una clase no implementa un método, pero las clases secundarias pueden hacerlo? En otras palabras, tener un método abstracto en una clase no abstracta.
osa
@SergeyOrshanskiy Es útil para cuando, dependiendo de cómo construyas un objeto, necesites crear una clase anónima que implemente una interfaz para instanciar una variable miembro, pero no quieres que se use. Si lo configuró nully lo usó accidentalmente (o alguien más lo hizo) obtendrá los NullPointerExceptionsque son menos obvios que UnsupportedOperationExceptionsen este caso. Solo un ejemplo.
2rs2ts

Respuestas:

438

java.lang.UnsupportedOperationException

Lanzado para indicar que la operación solicitada no es compatible.

dfa
fuente
44
@JarrodRoberson OK, esa declaración realmente debería eliminarse de la documentación de la clase en ese caso. La excepción parece ser utilizada por otros paquetes. Supongo que si Oracle lo hace, entonces nosotros también deberíamos. Presentaré un informe de error.
Maarten Bodewes
1
Tenga en cuenta que esto no está marcado RuntimeException . No recibirá comentarios ni asistencia para manejar estas excepciones durante el tiempo de compilación. Si esto se usa para un método tropezado o un trabajo en progreso, debe usar algún tipo de excepción marcada .
TastyWheat
221

Diferenciar entre los dos casos que nombró:

  • Para indicar que la operación solicitada no es compatible y probablemente nunca lo sea, arroje un UnsupportedOperationException.

  • Para indicar que la operación solicitada aún no se ha implementado, elija entre esto:

    1. Utilice el NotImplementedExceptionde apache commons-lang que estaba disponible en commons-lang2 y ha añadido de nuevo a commons-lang3 en la versión 3.2.

    2. Implementa el tuyo NotImplementedException.

    3. Lanza un UnsupportedOperationExceptionmensaje con el mensaje "Aún no implementado".

steffen
fuente
1
Voy con esto, porque me parece razonable. "Sin embargo" o "nunca" indicado por la Excepción da una idea de cómo reaccionar ante esto.
sschrass
3
Los números 1 o 2 son preferibles en la práctica. # 3 captura la distinción semántica entre "no admitido" y "no implementado", pero tener una clase separada hace que sea más fácil hacer una búsqueda rápida para verificar que no se haya olvidado de implementar todo lo que debería antes de comprometerse.
Sean U
44
# 3 es mejor para métodos no implementados ya que no requiere una biblioteca de terceros o trabajo adicional, incluso si es commons-lang.
JoshDM
28

Si crea una nueva función (aún no implementada) en NetBeans , genera un cuerpo de método con la siguiente declaración:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

Por lo tanto, recomiendo usar UnsupportedOperationException .

Benny Neugebauer
fuente
14

Si desea más granularidad y una mejor descripción, puede usar NotImplementedException de commons-lang

Advertencia: Disponible antes de las versiones 2.6 y después de las versiones 3.2, solo.

Guillaume
fuente