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 ответов

8 просмотров

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

Не вызывать изменяющих методов, 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 параметров в джаву ещё не завезли, хотя в котлине кто-то что-то про это говорил, кажется, в контексте нейтива

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

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

Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
Почему спрашиваю - поймал падение на совершенно уже пустом проекте, хочу до минимального повторяемого свести... Такой вопрос - вот эти юниты, перечисленные в инспекторе объек...
notme
6
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Друзья, за кем?
Magic
12
А шо, ты этой библиотекой пользуешься?
Darkanronpa Dark Hole
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет. Кто-то может подсказать, как можно перевести значения Selection поля, если список значений в нем формируется динамически? Я изначально их получаю из selection дру...
Наталья Селезнева
6
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Карта сайта