Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать объект по значениям? / 22 сообщений из 22, страница 1 из 1
03.08.2014, 18:16
    #38711655
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
Конструктор, который вызывается два раза, с аргументом, который, как я ожидаю, неизменный между вызовами конструктора. Однако, второй вывод из конструктора опровергает это, так как данные из data.getCities() уже изменились! Мне казалось, что data не должен тут измениться. Я так понимаю, что объект предается по ссылке. Каким же образом передать так, что data остался неизменным?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
	public General(Data data) {
		this.cities = data.getCities();
		this.catalog = data.getCatalog();
		this.excludedCities = new HashSet<>();
		//
		for (City city : catalog) {
			System.out.println(city.getName() + " - " + city.getSource());
		}
	}
...
Рейтинг: 0 / 0
03.08.2014, 18:35
    #38711660
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
данные изменились из data.getCatalog();
...
Рейтинг: 0 / 0
03.08.2014, 18:43
    #38711663
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174,

передавай object.clone()
...
Рейтинг: 0 / 0
03.08.2014, 18:49
    #38711667
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
MasterZiv, стал консультантом в Java?
...
Рейтинг: 0 / 0
03.08.2014, 19:14
    #38711682
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
MasterZivrema174,
передавай object.clone()
если бы был такой метод, то так бы и передал
...
Рейтинг: 0 / 0
03.08.2014, 23:12
    #38711731
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
имплементил этот метод от клонабле, в нем только return super.clone();
но похоже ничего не меняется. теперь то я передаю новый объект?

Код: java
1.
2.
3.
4.
5.
		for(String[] pairCity: data.getPairCities()) {
			Data copyData = (Data) data.clone();
			General gen = new General(copyData);
			gen.resolve(pairCity);
		}
...
Рейтинг: 0 / 0
03.08.2014, 23:16
    #38711732
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174,

Код: java
1.
return super.clone();



ничего не делает если твой базовый класс - это Object. Ты должен руками
воссоздать "глубокое" копирование всех полей.
...
Рейтинг: 0 / 0
03.08.2014, 23:37
    #38711737
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
качнул либу cloning (Java Deep-Cloning library), все заработало
...
Рейтинг: 0 / 0
04.08.2014, 00:38
    #38711749
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
Молодец. Только почитай про клонирование. Ато наклонируешь файлов и сокетов....
...
Рейтинг: 0 / 0
04.08.2014, 02:37
    #38711769
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
да читал... в том классе ничего такого нет, лучше подскажите как обойтись без всей этой 3rd party мутотени, т.е. как перестроить код, чтобы сделать то, что показано в первом сообщении
...
Рейтинг: 0 / 0
04.08.2014, 09:21
    #38711821
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174,
Реализуйте метод clone() в своем объекте Data и вызывайте конструктор
Код: java
1.
new General(data.clone());


это если я правильно понял что вам нужно.
...
Рейтинг: 0 / 0
04.08.2014, 11:26
    #38711926
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174да читал... в том классе ничего такого нет, лучше подскажите как обойтись без всей этой 3rd party мутотени, т.е. как перестроить код, чтобы сделать то, что показано в первом сообщении
Покажи исходник Data
...
Рейтинг: 0 / 0
04.08.2014, 11:56
    #38711955
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
maytonrema174да читал... в том классе ничего такого нет, лучше подскажите как обойтись без всей этой 3rd party мутотени, т.е. как перестроить код, чтобы сделать то, что показано в первом сообщении
Покажи исходник Data

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class Data {
	
	private int cities;
	
	private List<City> catalog = new ArrayList<>();
	
	private List<String[]> pairCities = new ArrayList<>();	

	public int getCities() {
		return cities;
	}
	public void setCities(int cities) {
		this.cities = cities;
	}
	public List<City> getCatalog() {
		return catalog;
	}
	public void setCatalog(List<City> catalog) {
		this.catalog = catalog;
	}
	public List<String[]> getPairCities() {
		return pairCities;
	}
	public void setPairCities(List<String[]> pairCities) {
		this.pairCities = pairCities;
	}
}
...
Рейтинг: 0 / 0
04.08.2014, 12:16
    #38711991
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174Каким же образом передать так, что data остался неизменным
Ничего не понял.
Data - объект. Вам нужна копия объекта или ссылка в памяти на один и тот-же объект?
Объект остался неизменным - imho не точная фраза.
...
Рейтинг: 0 / 0
04.08.2014, 12:26
    #38712001
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174
Код: java
1.
	private List<String[]> pairCities = new ArrayList<>();	


Вобщем смотри. Метод клона сделать не очень сложно.

Но сходу замечание. Как ты используешь эту структуру. Список массивов.
Что лежит внутри?

Возможно есть более простая реализация для пар.
...
Рейтинг: 0 / 0
04.08.2014, 15:24
    #38712229
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
On 03.08.2014 19:16, rema174 wrote:

Кстати, всё ещё остаётся вопрос с этим:

> Конструктор, который вызывается два раза, с аргументом, который, как я
> ожидаю, неизменный между вызовами конструктора. Однако, второй вывод из
> конструктора опровергает это, так как данные из data.getCities() уже
> изменились! Мне казалось, что data не должен тут измениться.

В смысле, хорошо бы подумать, что же там в этих конструкторах происходит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.08.2014, 15:31
    #38712242
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
Читал читал. Три раза прочел весь топик. Нифига не понял. Где и что у автора "изменилось" и что его код вообще делать должен.
...
Рейтинг: 0 / 0
04.08.2014, 15:33
    #38712245
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174Каким же образом передать так, что data остался неизменным?
Используйте Immutable Object. Если очень нужно, чтобы данные нельзя было изменить, соотвенственно надо и класс так реализовать.
...
Рейтинг: 0 / 0
04.08.2014, 18:20
    #38712482
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
maytonrema174
Код: java
1.
	private List<String[]> pairCities = new ArrayList<>();	


Вобщем смотри. Метод клона сделать не очень сложно.
Но сходу замечание. Как ты используешь эту структуру. Список массивов.
Что лежит внутри? Возможно есть более простая реализация для пар.
в каждом массиве по два стринга
...
Рейтинг: 0 / 0
04.08.2014, 18:28
    #38712485
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
допусти там вместо листа будет мэп(стринг, стринг)
p.s. я вообщем-то сделал как хотел, но интересно узнать, как там реализуется метод clone
...
Рейтинг: 0 / 0
04.08.2014, 18:56
    #38712518
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
rema174,
вроде вот, все методы копирования массива
http://jdevnotes.blogspot.ru/2009/05/java-2.html
выбирай любой по вкусу.
...
Рейтинг: 0 / 0
04.08.2014, 20:54
    #38712573
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать объект по значениям?
вопрос закрыт, спасибо за внимание
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать объект по значениям? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]