2012-02-28 2 views
1

Я хочу, чтобы перегрузить два метода с одним параметром, в методе varargs Строки и другой String[], но я добиваюсь следующее сообщение об ошибке компиляции времени:перегрузки два метода с vararg и String [] Параметр

Duplicate method registerByName(String...) 

Мой сниппета код является:

public void registerByName(String[] names) 
{ 

} 

public void registerByName(String...names) 
{ 

} 

Почему?

ответ

1

vararg - еще один способ разместить (Object[]), поэтому метод MyMethod(MyObject[] obj) и MyMethod(MyObject... obj) - то же самое для компилятора. Это просто синтаксический сахар.

Вы можете передать doc

It is still true that multiple arguments must be passed in an array, but the varargs feature automates and hides the process. Furthermore, it is upward compatible with preexisting APIs. So, for example, the MessageFormat.format method now has this declaration:

public static String format(String pattern, 
          Object... arguments); 

The three periods after the final parameter's type indicate that the final argument may be passed as an array or as a sequence of arguments. [...]

0

Если у вас есть метод, как

public static void registerByName(String... names); 

Это совершенно законно называть его с аргументом массива:

registerByName(new String[] {"sam"}); 

Для этого причина, вы не можете перегрузить Type[] и Type....

JVM даже не знает разницы между этими двумя сигнатурами. Попробуйте запустить javap в файле класса с помощью метода varargs.

+0

Я не знаю, если это хорошее объяснение. Вы можете вызвать 'foo (Integer x)' с аргументом 'int', но все же перегружать метод в обоих вариантах, поэтому это рассуждение не всегда работает. (Последнее предложение ответа больше похоже на это). – Thilo

+0

@Thilo справедливой точки. –

2

«Строка ...» и «String []» точно одна вещь ...

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