Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Осторожнее с varargs методами
Постоянная ссылка 12-08-2008 anydoby java

Сегодня битый час боролся с одним "багом" в JDK 1.5

Проблема иллюстрируется так:


        String[] ss = {"Hello", "world"};
        Object sss = ss;
        
        System.out.println(Arrays.asList(ss));
        System.out.println(Arrays.asList(sss));
        System.out.println(Arrays.asList((Object[])sss));

Казалось бы, результат трех принтов должен быть один и тот же, однако выглядит от вот так:


[Hello, world]
[[Ljava.lang.String;@1c78e57]
[Hello, world]

Связано это с тем, что компилятор автоматически создает аргумент new Object[]{sss} перед вызовом метода с varargs сигнатурой, если тип переменной не массив. Поэтому необходимо явно делать каст перед вызовом таких методов, чтобы компилятор не наделал "глупостей".

Добавить комментарий

Предыдущая статья Глюки проксей в Hibernate Следующая статья Почему JSF не обновляет состояние combobox