Работа с массивами Java - PullRequest
       28

Работа с массивами Java

1 голос
/ 08 января 2010
/**
 * Testing Arrays
 * @author N002213F
 * @version 1.0
 */
public class JavaArrays {

    public void processNames(String[] arg) {
        //-- patented method, stop, do not read ;)
    }

    public void test() {

        // works fine
        String[] names1 = new String[] { "Jane", "John" };
        processNames(names1);

        // works fine, nothing here
        String[] names2 = { "Jane", "John" };
        processNames(names2);

        // works again, please procced
        processNames(new String[] { "Jane", "John" });

        // fails, why, are there any reasons?
        processNames({ "Jane", "John" });

        // fails, but i thought Java 5 [vargs][1] handles this
        processNames("Jane", "John");
    }
}

Ответы [ 3 ]

9 голосов
/ 08 января 2010
processNames({ "Jane", "John" });

Это не получается, почему есть какие-то причины?

Вы не указали тип. Java здесь не делает вывод типов; он ожидает, что вы укажете, что это строковый массив. Ответы на этот вопрос тоже могут помочь в этом

processNames("Jane", "John"); 

Это тоже не получается, но я думал, что Java 5 varargs обрабатывает это

Если вы хотите varargs, вы должны написать свой метод так:

public void processNames(String... arg)

Обратите внимание на ... вместо []. Принятие массива не дает вам права использовать varargs для этого метода.

1 голос
/ 08 января 2010

В вашей последней строке: processNames(String ...args); должно быть написано так, чтобы varargs работал.

0 голосов
/ 08 января 2010

Третий вызов неверен, потому что вы не можете создать такой массив, вы делаете это так же, как во втором вызове. Если вы хотите, чтобы последний вызов завершился успешно, вы должны объявить processNames как получателя varargs ( см. Здесь )

...