Method Overloading for null argument

前端 未结 7 731
悲哀的现实
悲哀的现实 2020-11-21 13:48

I have added three methods with parameters:

public static  void doSomething(Object obj) {
    System.out.println(\"Object called\");
}

public static  void d         


        
相关标签:
7条回答
  • 2020-11-21 14:12

    null is a valid value for any of the three types; so the compiler cannot decide which function to use. Use something like doSomething((Object)null) or doSomething((Integer)null) instead.

    0 讨论(0)
  • 2020-11-21 14:16

    there is an ambiguity because of doSomething(char[] obj) and doSomething(Integer obj) .

    char[] and Integer both are same superior for null thats why they are in ambiguous .

    0 讨论(0)
  • 2020-11-21 14:17

    Java will always try to use the most specific applicable version of a method that's available (see JLS §15.12.2).

    Object, char[] and Integer can all take null as a valid value. Therefore all 3 version are applicable, so Java will have to find the most specific one.

    Since Object is the super-type of char[], the array version is more specific than the Object-version. So if only those two methods exist, the char[] version will be chosen.

    When both the char[] and Integer versions are available, then both of them are more specific than Object but none is more specific than the other, so Java can't decide which one to call. In this case you'll have to explicitly mention which one you want to call by casting the argument to the appropriate type.

    Note that in practice this problem occurs far more seldom than one might think. The reason for this is that it only happens when you're explicitly calling a method with null or with a variable of a rather un-specific type (such as Object).

    On the contrary, the following invocation would be perfectly unambiguous:

    char[] x = null;
    doSomething(x);
    

    Although you're still passing the value null, Java knows exactly which method to call, since it will take the type of the variable into account.

    0 讨论(0)
  • 2020-11-21 14:19

    Every class in Java extends Object class.Even Integer class also extends Object. Hence both Object and Integer are considered as Object instance. So when you pass null as a parameter than compiler gets confused that which object method to call i.e. With parameter Object or parameter Integer since they both are object and their reference can be null. But the primitives in java does not extends Object.

    0 讨论(0)
  • 2020-11-21 14:23

    Each pair of these three methods is ambiguous by itself when called with a null argument. Because each parameter type is a reference type.

    The following are the three ways to call one specific method of yours with null.

    doSomething( (Object) null);
    doSomething( (Integer) null);
    doSomething( (char[]) null);
    

    May I suggest to remove this ambiguity if you actually plan to call these methods with null arguments. Such a design invites errors in the future.

    0 讨论(0)
  • 2020-11-21 14:24
    class Sample{
      public static void main (String[] args) {
           Sample s = new Sample();
           s.printVal(null);
    
        } 
        public static void printVal(Object i){
            System.out.println("obj called "+i);
        }
    
        public static void printVal(Integer i){
            System.out.println("Int called "+i);
        }
    }
    

    The output is Int called null and so ambiguity is with char[] and Integer

    0 讨论(0)
提交回复
热议问题