i have added 3 methods parameters:
public static void dosomething(object obj) { system.out.println("object called"); } public static void dosomething(char[] obj) { system.out.println("array called"); } public static void dosomething(integer obj) { system.out.println("integer called"); }
when calling dosomething(null)
, compiler throws error ambiguous methods. issue because integer
, char[]
methods or integer
, object
methods?
java try use specific applicable version of method that's available (see jls §15.12.2).
object
, char[]
, integer
can take null
valid value. therefore 3 version applicable, java have find specific one.
since object
super-type of char[]
, array version more specific object
-version. if 2 methods exist, char[]
version chosen.
when both char[]
, integer
versions available, both of them more specific object
none more specific other, java can't decide 1 call. in case you'll have explicitly mention 1 want call casting argument appropriate type.
note in practice problem occurs far more seldom 1 might think. reason happens when you're explicitly calling method null
or variable of rather un-specific type (such object
).
on contrary, following invocation unambiguous:
char[] x = null; dosomething(x);
although you're still passing value null
, java knows method call, since take type of variable account.
Comments
Post a Comment