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

3 minutos de lectura

avatar de usuario
Krsna Kumar

En particular, ¿existe un estándar Exception subclase utilizada en estas circunstancias?

  • ¿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.

    – Serguéi Orshanskiy

    7 oct 2013 a las 22:24

  • @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 configuras en null y lo usaste accidentalmente (o alguien más lo hizo) obtendrías NullPointerExceptions que son menos evidentes que UnsupportedOperationExceptions en este caso. Solo un ejemplo.

    – 2rs2ts

    24/04/2014 a las 15:52

avatar de usuario
DFA

java.lang.UnsupportedOperationException

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

  • @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, nosotros también deberíamos hacerlo. Presentaré un informe de error.

    -Maarten Bodewes

    7 junio 2016 a las 18:14

  • Tenga en cuenta que esto es un desenfrenado RuntimeException. No recibirá comentarios ni asistencia en el manejo de estas excepciones durante el tiempo de compilación. Si esto se usa para un método stub o un trabajo en progreso, debe usar algún tipo de comprobado excepción.

    – Sabroso Trigo

    8 de febrero de 2019 a las 18:58

  • Es posible que desee hacerlo así para indicar que la implementación aún está por llegar: throw new java.lang.UnsupportedOperationException(“Todavía no implementado”); //todo implementar

    – Simeón

    29 de junio a las 11:58

avatar de usuario
steffen

Diferencie entre los dos casos que nombró:

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

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

    1. Utilizar el NotImplementedException de apache commons-lang que estaba disponible en commons-lang2 y se volvió a agregar a commons-lang3 en la versión 3.2.

    2. Implementa tu propia NotImplementedException.

    3. lanzar un UnsupportedOperationException con un mensaje como “Todavía no implementado”.

  • Voy con esto, porque me parece razonable. “Aún” o “nunca” indicado por la Excepción da una idea de cómo reaccionar ante esto.

    – sschrass

    16 de febrero de 2016 a las 9:16

  • Los números 1 o 2 son mucho más preferibles en la práctica. #3 captura la distinción semántica entre “no soportado” 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 ha olvidado de implementar nada antes de comprometerse.

    – Sean U.

    2 de septiembre de 2017 a las 12:53

  • #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

    18/07/2018 a las 22:55

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

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

Por lo tanto, recomiendo usar el UnsupportedOperationException.

avatar de usuario
Guillaume

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 únicamente.

El siguiente Calculator la clase de muestra muestra la diferencia

public class Calculator() {

 int add(int a , int b){
    return a+b;
  }

  int dived(int a , int b){
        if ( b == 0 ) {
           throw new UnsupportedOperationException("I can not dived by zero, 
                         not now not for the rest of my life!")
        }else{
          return a/b;
       }
   }

   int multiple(int a , int b){
      //NotImplementedException from apache or some custom excpetion
      throw new NotImplementedException("Will be implement in release 3.5");
   } 
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad