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

24 просмотра

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта