Есть ли способ сделать обычный массив неизменным в Java?

Погуглил, нашел много кода. Но любой из них дал мне то, что я хочу. Я хочу сделать обычный массив неизменным. Я попробовал это:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class test {

    public static void main(String[] args) {

        final Integer array[];

        List temp = new ArrayList();
        temp.add(Integer.valueOf(0));
        temp.add(Integer.valueOf(2));
        temp.add(Integer.valueOf(3));
        temp.add(Integer.valueOf(4));
        List immutable = Collections.unmodifiableList(temp);

        array = immutable.toArray(new Integer[immutable.size()]);

        for(int i=0; i
 fge15 июн. 2013 г., 13:17
@ Як, у твоего учителя есть некоторые фундаментальные недоразумения относительно массивов,или же Вы не все нам рассказали ... Но в любом случае ТАК не "решение домашних заданий " сайт
 Evgeni Dimitrov15 июн. 2013 г., 13:12
 johnchen90215 июн. 2013 г., 13:12
В отличие от C, вы можетет. Однако вы можете использовать обертку.
 yak15 июн. 2013 г., 13:13
потому что мой учитель сказал, что этот массив не может быть коллекцией: /
 André Stannek15 июн. 2013 г., 13:12
Создание окончательной переменной массива только предотвращает присвоение ей нового массива. Насколько я знаю, сделать это невозможно ».окончательные значения
 zerocool15 июн. 2013 г., 13:12
почему вы не используете ArrayList или создаете свою собственную обертку?
 zerocool15 июн. 2013 г., 13:15
Ну, в этом случае вы пишете свою собственную обертку, но позвольте мне сказать вам, что это все равно будет коллекция :). будь то конец массива или массива данных, который вы используете для хранения данных.
 fge15 июн. 2013 г., 13:21
@zerocool это может быть набор элементов, но неCollection как определено JDK
 yak15 июн. 2013 г., 13:28
Так что я думаю, мне нужно написать эту обертку .. спасибо! :)
 zerocool15 июн. 2013 г., 13:25
Согласен, но як говорит, что его учитель говорит, что это Array Cant Be Collection, просто хотел уточнить, что даже массив - это коллекция. Я понимаю, что это не то же самое, что java.util.Collection.
 Boann15 июн. 2013 г., 13:44
Небольшая точка педантичности: неизменный список - это не то же самое, что неизменяемый список. Неизменный списокне изменится, Неизменяемый список - это тот, которыйвы можете'изменить через этот списокметоды регулярного доступа, НоCollections.unmodifiableList просто оборачивает исходный список, а не создает копию, так что пока вы сохраняете исходную ссылку наtemp вокруг можно позвонитьtemp.add и смотретьнеизменный" изменение списка в течение его жизни. (С другой стороны,toArray создает копию, поэтому даже если список действительно был неизменным, новый массив всегда можно изменить.)

Ответы на вопрос(3)

Вам придется использоватьCollections.unmodifiableList() как вы уже сделали в своем коде.

Решение Вопроса

использовать его как массив, вы можете'т.

Вы должны создать для него оболочку, чтобы вы, к примеру, добавили исключение:.set(), но никакие изменения не позволят вам создать исключение для:

array[0] = somethingElse;

Конечно, неизменность элементов - это совсем другое дело!

НОТА: стандартное исключение для неподдерживаемых операций называется точноUnsupportedOperationException; как это не проверено, ты нене нужно объявлять это в вашем методеthrows пункт.

Гуава»s ImmutableListвысокопроизводительная, неизменяемая реализация List с произвольным доступом, которая не допускает нулевые элементы. В отличие отCollections.unmodifiableList(java.util.List), который является представлением отдельной коллекции, которая все еще может изменяться, экземпляр ImmutableList содержит свои собственные личные данные и никогда не изменится

 fge15 июн. 2013 г., 13:42
Однако ОП говорит "конечный результат" не должно бытьCollection... В противном случае, да, гуавыImmutable* камень.

Ваш ответ на вопрос