2009-05-06 7 views
200

En particular, ¿existe una subclase estándar Exception utilizada en estas circunstancias?¿Cuál es la excepción estándar para lanzar en Java para operaciones no compatibles/implementadas?

+0

¿Es apropiado utilizarlo 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

+0

@SergeyOrshanskiy Es útil cuando, dependiendo de cómo construya un objeto, necesita crear una clase anónima que implemente una interfaz para instanciar una variable miembro, pero no desea que se use. Si lo configura en 'nulo' y lo usó accidentalmente (o lo hizo alguien más) obtendría' NullPointerExceptions' que son menos obvias que 'UnsupportedOperationExceptions' en este caso. Solo un ejemplo. – 2rs2ts

Respuesta

291

java.lang.UnsupportedOperationException

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

+0

ignore este ridículo "esto es parte del marco de colecciones", está en el paquete 'java.lang', el JavaDoc establece explícitamente que esto es para lo que sirve. –

+3

@JarrodRoberson Bien, esa afirmació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 hacerlo. Archivaré un informe de error. –

8

Si quieres más granularidad y una mejor descripción, desde que se podrían utilizar NotImplementedException de commons-lang

Advertencia: disponible antes y después de las versiones 2.6 versiones 3.2, solamente.

164

diferenciar entre los dos casos se denomina:

  • para indicar que la operación solicitada no es compatible y muy probablemente nunca será, lanzar una UnsupportedOperationException.

  • para indicar la operación solicitada no se ha aplicado todavía, elija entre lo siguiente:

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

    2. Implemente su propio NotImplementedException.

    3. Lanza un UnsupportedOperationException con un mensaje como "No implementado, todavía".

+0

Voy con esto, porque me parece razonable. "Sin embargo" o "nunca" indicado por la Excepción da una idea sobre cómo reaccionar sobre esto. – sschrass

+1

#s 1 o 2 son muy 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. –

4

Si crea una función nueva (todavía no implementado) en NetBeans, entonces se genera un cuerpo de método con la siguiente afirmación:

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

Por lo tanto, recomiendo utilizar el UnsupportedOperationException .

Cuestiones relacionadas