170 похожих чатов

Public class Book { public ArrayList<Integer> list

= new ArrayList<>();
{
list.add(1);
list.add(2);
}

public Integer setFinalList (final List<Integer> list) {
list.remove(0);
return this.list.get(0);
}
}
setFinalList вернёт 2, нужен 1. Как сделать так чтобы List или будь то HashMap, Set не менялось внутри метода?

33 ответов

22 просмотра

Не понял вопроса 😊

Не вызывать изменяющих методов, i.e. не делать remove?

Геннадий- Автор вопроса
Etki
Не вызывать изменяющих методов, i.e. не делать rem...

😁 и всё-таки что-то типо final можно сделать в этих случаях?

Геннадий
😁 и всё-таки что-то типо final можно сделать в эти...

То что вам нужно. Это неизменяемые коллекции.

Геннадий
😁 и всё-таки что-то типо final можно сделать в эти...

А, тебе immutable list нужен. В Collections.unmodifiableList() заверни либо делай копию и передавай ее. Зачем стетом инстанса путаешь, если вопрос исключительно в аргументе?

Юзать персистентные коллекции?

Геннадий- Автор вопроса
Artur
То что вам нужно. Это неизменяемые коллекции.

не выход мне нужно изменяемая коллекция (или другой mutable класс) но нужен способ из них делать immutable внутри какого-нибудь метода допустим кто-то обрабатывает list, обращаясь к нему через параметр метода мне нужно по параметру сразу как-то определить будет он менятся в методе или нет, а не анализировать весь код метода.

Геннадий- Автор вопроса
Artur
Что значит, делать immutable внутри метода?

что-то вроде public void someMethod(immutable List<Integer> list) {...} работаешь с классом mutable, кто-то использует его в виде параметра нужно лезть в код этого метода и проверять что он там не изменяется.

Геннадий
что-то вроде public void someMethod(immutable Lis...

Кто не изменяется? Постановку задачи не понимаю 🤨

Геннадий
что-то вроде public void someMethod(immutable Lis...

Зачем лезть в immutable объект и проверять что оно не изменилось?

Геннадий- Автор вопроса
Artur
Кто не изменяется? Постановку задачи не понимаю 🤨

элементарно работаешь с ArrayList, нужно быренко глянуть где он меняется а где нет из кучи методов где он вызывается, если бы там был такой модификатор как immutable то меньше кода анализировать

Геннадий
что-то вроде public void someMethod(immutable Lis...

Ты своему коду не доверяешь, что кто-то где-то твою коллекцию испортит? Тогда заверни в неизменяемый и передай в метод

Геннадий- Автор вопроса
Владислав Хакин
Ты своему коду не доверяешь, что кто-то где-то тво...

ну все работают в команде и проверять чужой код потеря времени, чтобы убидиться что там твой лист только читают.

Геннадий
элементарно работаешь с ArrayList, нужно быренко г...

А все просто, есть srp, меняться должно в одном месте(тот кто и владеет)

Геннадий
элементарно работаешь с ArrayList, нужно быренко г...

Что то похоже на то, как будто нужно навесить ивент на событие

Владислав Хакин
Короче такого в джаве нет

А в котлине если не изменяет память отдельные интерфейсы есть изменяемые/неизменяемая коллекция

Геннадий
ну все работают в команде и проверять чужой код по...

1) код-ревью не потеря времени 2) ты уж определись, или надо использовать иммутабельные коллекции, или они могут быть модифицированы в любом месте кода

Denis Chikanov
1) код-ревью не потеря времени 2) ты уж определись...

Вначале они не делают код ревью, а потом у них иммутабельные коллекции могут быть модифицированы а любом месте кода

Геннадий
что-то вроде public void someMethod(immutable Lis...

Так ты это и делаешь через unmodifiableX. А через consumer.pass(new ArrayList<>(source)) ты ничего не делаешь, в том числе не отдаешь исходный объект

Геннадий- Автор вопроса
Etki
Так ты это и делаешь через unmodifiableX. А через ...

причем тут консьюмер, метода pass у консьюмера нет. Единственный вариант похоже это отдавать в метод копию объекта было бы конечно замечательно если был модификатор параметра (метода или класса делающий это сам).

Геннадий
причем тут консьюмер, метода pass у консьюмера нет...

Уважаемый, тут проблема не в написании, а а чтении (понимании абстракций)

Геннадий
причем тут консьюмер, метода pass у консьюмера нет...

Было б вообще не замечательно, потому что с pass-by-value, где value является референс, семантика такого поведения или ни хера не полезная, или ни хера не понятная

Геннадий- Автор вопроса
Геннадий
а причем тут копия объекта и pass-by-value?

public class MyObject { List<Integer> mutableField = new ArrayList<>(); } Вот есть у тебя такой объект. Если ты копию этого объекта передаешь в другой метод, что у него будет внутри - ссылка на тот же лист? Или лист тоже копировать надо?

Геннадий- Автор вопроса
Denis Chikanov
public class MyObject { List<Integer> mutableFiel...

имеется ввиду полный клон, конечно это будет жрать память.

- Передавать в метод неизменяемую коллекцию. - Установить в качестве параметра метода List<? extends Integer> list В этот список больше ничего нельзя добавлять, изменять данные можно.

Sadogursky Aleksandr
- Передавать в метод неизменяемую коллекцию. - Ус...

list.add(null) всё ещё будет работать. Ну и unchecked cast никто не отменял.

Геннадий
не выход мне нужно изменяемая коллекция (или друго...

Cpp developer detected Нет, const параметров в джаву ещё не завезли, хотя в котлине кто-то что-то про это говорил, кажется, в контексте нейтива

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта