[java] Перегрузка метода для нулевого аргумента


2 Answers

Каждая пара этих трех методов является двусмысленной сама по себе при вызове с null аргументом. Поскольку каждый тип параметра является ссылочным типом.

Ниже перечислены три способа вызова одного конкретного метода с нулевым значением.

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

Могу ли я предложить устранить эту двусмысленность, если вы на самом деле планируете называть эти методы null аргументами. Такой дизайн предлагает ошибки в будущем.

Question

Я добавил три метода с параметрами:

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");
}

Когда я doSomething(null) , компилятор выдает ошибку как неоднозначные методы . Так возникает проблема, потому что методы Integer и char[] или Integer и Object ?




Каждый класс в Java расширяет класс Object. Еще один класс Integer также расширяет Object. Следовательно, Object и Integer рассматриваются как экземпляр объекта. Поэтому, когда вы передаете значение null в качестве параметра, а компилятор путается с тем, какой метод объекта вызывается, т.е. с параметром Object или параметром Integer, поскольку оба они являются объектами, а их ссылка может быть нулевой. Но примитивы в java не расширяют Object.




есть двусмысленность из-за doSomething (char [] obj) и doSomething (Integer obj).

char [] и Integer оба одинаковы выше для null, поэтому они неоднозначны.




Related