2012-01-20 3 views
2

Можно создать дубликат:
Method Overloading for NULL parameterПерегруженный конструктор с различными аргументами объекта

Быстрый вопрос о "наилучшей практики" при кодировании в Java. У меня есть класс, который может быть построен с двумя разными типами объектов (HashMap или отдельный класс, который я называю SearchTerm). Обычно у меня довольно хорошие обработчики в случае, когда клиент дает пустой аргумент через конструктор, но если это произойдет, виртуальная машина рушится и говорит, что аргумент был неоднозначным. (Это имеет смысл, поскольку нулевой аргумент мог ссылаться на любой объект.)

Как обычно обстоит дело с этими ситуациями? Это плохая форма, позволяющая отдельным объектам в качестве аргументов?

+3

Это ошибка компилятора. В чем проблема? – SLaks

+0

VM должен обрабатывать конструктор для вызова на основе типа аргумента. – Will

+1

@WilliamVanRensselaer - но это не так. Сэл, можете ли вы использовать фабрику для создания этих объектов и отказаться от фабрики, когда аргумент равен нулю? Или, если нулевой регистр действителен, иметь третий конструктор с одним аргументом меньше, чем на фабрике. –

ответ

4

Если я что-то не понимаю, эта ошибка двусмысленности должна произойти только в том случае, если вы попытаетесь вызвать конструктор с аргументом null. Если вы хотите, чтобы обойти эту проблему, можно привести аргумент класса, который вы хотите использовать, например, так:

new YourClass((SearchTerm) null); 

Таким образом, компилятор знает, что даже если аргумент null, он должен относиться к нему как a null экземпляр SearchTerm.

Если у вас есть экземпляр SearchTerm что случается быть пустым, не должно быть проблемой:

SearchTerm searchTerm = null; 
new YourClass(searchTerm); 

должен работать без ошибок неоднозначности, потому что компилятор знает, какой тип экземпляра, даже несмотря на он равен нулю.

Смежные вопросы