Почему нельзя использовать сокращенную инициализацию массивов полей в конструкторах 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
в этот массив.
3 ответа:
При определении массива в строке определения предполагается, что он знает, каким будет тип, поэтому
new int[]
является избыточным. Однако при использовании присваивания он не предполагает, что он знает тип массива, поэтому вы должны указать его.Конечно, другие языки не имеют проблем с этим, но в Java разница заключается в том, определяете ли вы и инициализируете поля/переменные в одной строке.
Помимо использования
new Object[]{blah, blah....}
здесь есть немного более короткий подход, чтобы сделать то, что вы хотите. Используйте следующий метод.PS-Java хороша, но в подобных ситуациях она отстойна. Попробуйте ruby или python для вашего проекта, если это возможно и оправданно. (Смотрите java 8 до сих пор не имеет стенографии для заполнения хэш-карты , и им потребовалось так много времени, чтобы внести небольшие изменения для повышения производительности разработчиков)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; }