Metodeoverbelastning og nul-fejl i Java
I Java er det meget almindeligt at overbelaste metoder. Nedenfor er et interessant Java-program.
Java public class Test { // Overloaded methods public void fun ( Integer i ) { System . out . println ( & quot ; fun ( Integer ) & quot ;); } public void fun ( String name ) { System . out . println ( & quot ; fun ( String ) & quot ;); } // Driver code public static void main ( String [] args ) { Test mv = new Test (); // This line causes error mv . fun ( null ); } }
Output:
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
Grunden til at vi får kompileringstidsfejl i ovenstående scenarie er her metodeargumenterne Integer og String begge er ikke primitive datatyper i Java. Det betyder, at de accepterer nulværdier. Når vi sender en nulværdi til metode1, bliver compileren forvirret, hvilken metode den skal vælge, da begge accepterer nul. Denne kompileringstidsfejl ville ikke ske, medmindre vi med vilje sender null-værdien. Se for eksempel nedenstående scenarie, som vi generelt følger under kodning.
Java public class Test { // Overloaded methods public void fun ( Integer i ) { System . out . println ( & quot ; fun ( Integer ) & quot ;); } public void fun ( String name ) { System . out . println ( & quot ; fun ( String ) & quot ;); } // Driver code public static void main ( String [] args ) { Test mv = new Test (); Integer arg = null ; // No compiler error mv . fun ( arg ); } }
Output:
fun(Integer )
I ovenstående scenarie, hvis 'arg'-værdien er null på grund af resultatet af udtrykket, overføres null-værdien til metode1. Her ville vi ikke få kompileringstidsfejl, fordi vi specificerer, at argumentet er af typen Integer, derfor vælger compileren metoden1(Integer i) og vil udføre koden inde i det. Bemærk: Dette problem vil ikke fortsætte, når de tilsidesatte metodeargumenter er primitive datatyper. Fordi compileren vil vælge den mest egnede metode og udføre den.