logo

Претоварване на метода и нулева грешка в Java

В Java е много обичайно да се претоварват методи. По-долу има интересна Java програма. 

как да получите емотикони на ябълка на android
Java
public class Test {  // Overloaded methods  public void fun(Integer i)  {  System.out.println("fun(Integer ) ");  }  public void fun(String name)  {  System.out.println("fun(String ) ");  }  // Driver code   public static void main(String [] args)  {  Test mv = new Test();  // This line causes error  mv.fun(null);  } } 

Изход:



22: error: reference to fun is ambiguous mv.fun(null); ^ both method fun(Integer) in Test and method fun(String) in Test match 1 error

Причината, поради която получаваме грешка във времето на компилиране в горния сценарий, е, че тук аргументите на метода Integer и String не са примитивни типове данни в Java. Това означава, че приемат нулеви стойности. Когато предадем нулева стойност на method1, компилаторът се обърква кой метод трябва да избере, тъй като и двата приемат null. Тази грешка по време на компилиране няма да се случи, освен ако умишлено не подадем нулева стойност. Например вижте сценария по-долу, който следваме като цяло, докато кодираме. 

Java
public class Test {  // Overloaded methods  public void fun(Integer i)  {  System.out.println("fun(Integer ) ");  }  public void fun(String name)  {  System.out.println("fun(String ) ");  }  // Driver code  public static void main(String [] args)  {  Test mv = new Test();    Integer arg = null;  // No compiler error  mv.fun(arg);  } } 

Изход:

fun(Integer ) 

В горния сценарий, ако стойността на 'arg' е нулева поради резултата от израза, тогава нулевата стойност се предава на method1. Тук няма да получим грешка във времето на компилиране, защото указваме, че аргументът е от тип Integer, следователно компилаторът избира method1(Integer i) и ще изпълни кода вътре в него. Забележка: Този проблем няма да съществува, когато аргументите на заменения метод са примитивен тип данни. Тъй като компилаторът ще избере най-подходящия метод и ще го изпълни.