¿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.
@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á marcadoRuntimeException . 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:
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:
null
y lo usó accidentalmente (o alguien más lo hizo) obtendrá losNullPointerExceptions
que son menos obvios queUnsupportedOperationExceptions
en este caso. Solo un ejemplo.Respuestas:
java.lang.UnsupportedOperationException
fuente
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 .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:
Utilice el
NotImplementedException
de apache commons-lang que estaba disponible en commons-lang2 y ha añadido de nuevo a commons-lang3 en la versión 3.2.Implementa el tuyo
NotImplementedException
.Lanza un
UnsupportedOperationException
mensaje con el mensaje "Aún no implementado".fuente
Si crea una nueva función (aún no implementada) en NetBeans , genera un cuerpo de método con la siguiente declaración:
Por lo tanto, recomiendo usar UnsupportedOperationException .
fuente
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.
fuente