Почему вы не можете использовать сокращенную инициализацию массива полей в конструкторах Java? - PullRequest
21 голосов
/ 29 ноября 2011

Возьмите следующий пример:

private int[] list;

public Listing() {
    // Why can't I do this?
    list = {4, 5, 6, 7, 8};

    // I have to do this:
    int[] contents = {4, 5, 6, 7, 8};
    list = contents;
}

Почему я не могу использовать сокращенную инициализацию? Единственный способ обойти это - создать еще один массив и установить для него list.

Ответы [ 3 ]

23 голосов
/ 29 ноября 2011

Попробуйте list = new int[]{4, 5, 6, 7, 8};.

23 голосов
/ 29 ноября 2011

Когда вы определяете массив в строке определения, предполагается, что он знает, каким будет тип, поэтому new int[] является избыточным.Однако, когда вы используете присваивание, оно не предполагает, что знает тип массива, поэтому вы должны указать его.

Конечно, другие языки не имеют проблем с этим, но в Java разница в том, определяете ли вы и инициализируете поля / переменные в одной строке.

1 голос
/ 15 августа 2016

Помимо использования new Object[]{blah, blah....} Вот несколько более короткий подход к тому, что вы хотите.Используйте метод, приведенный ниже.

public static Object [] args(Object... vararg) {
    Object[] array = new Object[vararg.length];
    for (int i = 0; i < vararg.length; i++) {
        array[i] = vararg[i];
    }
    return array;
}

PS - Java хорош, но в таких ситуациях это плохо.Попробуйте ruby ​​или python для вашего проекта, если это возможно и оправдано.(Посмотрите, в Java 8 до сих пор нет сокращения для заполнения хэш-карты , и потребовалось так много времени, чтобы внести небольшое изменение, чтобы повысить производительность разработчика )

...