Почему вы не можете использовать инициализацию строковых массивов полей в конструкторах Java?
Возьмем следующий пример:
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
в этот массив.
Ответы
Ответ 1
Когда вы определяете массив в строке определения, он предполагает, что он знает, какой тип будет таким, чтобы new int[]
был избыточным. Однако, когда вы используете назначение, он не предполагает, что он знает тип массива, поэтому вы указали его.
Конечно, другие языки не имеют проблемы с этим, но в Java разница заключается в том, определяете ли вы и инициализируете поля/переменную в одной строке.
Ответ 2
Попробуйте list = new int[]{4, 5, 6, 7, 8};
.
Ответ 3
Кроме того, используя 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 для вашего проекта, если это возможно и оправданно. (Look java 8 до сих пор не имеет сокращений для заполнения хэш-карты, а им потребовалось столько времени, чтобы внести небольшие изменения для повышения производительности разработчиков)