Что делает следующая программа?
public class Confusing {
private Confusing(Object object) {
System.out.println("Object!");
}
private Confusing(double[] array) {
System.out.println("Array!");
}
public static void main(String[] args) {
new Confusing(null);
}
}
Это вопрос по спецификации. Первый из раздела "классические головоломки". Программа скомпилируется и выполнится конструктор, напечатающий Array. В приведенном выше примере оба конструктора можно вызвать, но по спецификации выбирается тот, который более конкретный. Это второй конструктор, так как каждый массив - это объект, но не каждый объект - массив. Для принудительного вызова необходимого конструктора нужно привести аргументы к типу, определенному в списке формальных параметров:
public static void main(String[] args) {
new Confusing((Object) null);
}
Обратите внимание, что если поменять тип первого конструктора в примере на Double (например), то программа не скомпилируется. В идеале, лучше избегать перегрузки конструкторов и методов.
Комментариев нет:
Отправить комментарий