logo

Перевантаження методів і нульова помилка в Java

У Java дуже часто перевантажують методи. Нижче представлена ​​цікава програма Java. 

пріоритетна черга java
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. Це означає, що вони приймають нульові значення. Коли ми передаємо нульове значення методу1, компілятор заплутується, який метод він має вибрати, оскільки обидва приймають нуль. Ця помилка часу компіляції не станеться, якщо ми навмисно не передамо нульове значення. Наприклад, перегляньте наведений нижче сценарій, якого ми зазвичай дотримуємося під час кодування. 

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' є нульовим через результат виразу, тоді нульове значення передається методу1. Тут ми не отримаємо помилку часу компіляції, оскільки ми вказуємо, що аргумент має тип Integer, отже, компілятор вибирає method1(Integer i) і виконає код у ньому. Примітка. Ця проблема не виникне, якщо перевизначені аргументи методу є примітивним типом даних. Тому що компілятор вибере найбільш підходящий метод і виконає його.