validar try sobrecargados sobrecarga porque pointer objeto metodos error catch java reference nullpointerexception null method-overloading

try - sobrecarga de metodos en java netbeans



Múltiples métodos sobrecargados: ¿Null es igual a NullPointerException? (2)

El compilador intentará coincidir con el parámetro más específico, que en este caso es NullPointerException . Puede ver más información en la especificación del lenguaje Java, sección http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5 http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5 :

Si más de un método miembro es accesible y aplicable a una invocación de método, es necesario elegir uno para proporcionar el descriptor para el envío del método en tiempo de ejecución. El lenguaje de programación Java utiliza la regla de que se elige el método más específico.

La intuición informal es que un método es más específico que otro si cualquier invocación manejada por el primer método se puede pasar al otro sin un error de tipo de tiempo de compilación.

[...]

Esta pregunta ya tiene una respuesta aquí:

public class TestMain { public static void methodTest(Exception e) { System.out.println("Exception method called"); } public static void methodTest(Object e) { System.out.println("Object method called"); } public static void methodTest(NullPointerException e) { System.out.println("NullPointerException method called"); } public static void main(String args[]) { methodTest(null); } }

Salida: Se llama el método NullPointerException


Si hay varios métodos sobrecargados que pueden llamarse con un parámetro dado ( null en su caso), el compilador elige el más específico.

Consulte http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5

En su caso, methodTest(Exception e) es más específico que methodTest(Object e) , ya que Exception es una subclase de Object. Y methodTest(NullPointerException e) es aún más específico.

Si reemplaza NullPointerException con otra subclase de Exception, el compilador elegirá esa.

Por otro lado, si testMethod(IllegalArgumentException e) un método adicional como testMethod(IllegalArgumentException e) el compilador generará un error, ya que no sabe cuál elegir.