Почему вы не можете использовать инициализацию Shorthand Array полей в Java Constructors?

StackOverflow https://stackoverflow.com/questions/8302179

Вопрос

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

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 к этому массиву.

Это было полезно?

Решение

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

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

Другие советы

Пытаться list = new int[]{4, 5, 6, 7, 8};.

Помимо использования 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 по -прежнему не имеет сокращения для заполнения HashMap, а также Им потребовалось так много времени, чтобы внести небольшие изменения, чтобы повысить производительность разработчиков)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top