2012-04-26 3 views
3

Я использую Java и иметь различные объекты, которые я делаю список, как это:Как я могу назначить объект другому объекту, когда у меня есть ссылка на него в Java?

objx o1; 
objx o2; 
objx o3; 

objx olist [] = { o1, o2, o3 }; 

теперь я хочу, чтобы назначить другие объекты, оригинальные объекты o1-а3, но с использованием списка.

Что-то вроде:

olist[0] = onew; 

Но в этом случае только список получает изменен, а не исходный объект o1. Как я могу сделать это на Java?

+0

из любопытства, это только проект или репетиции какой-нибудь реальный сценарий жизни? – heikkim

ответ

1

Вы не можете. Однако вы можете просто сохранить массив, а затем вы сможете изменить объект, на который ссылаются в каждом месте массива.

E.g.

objx olist[] = new objx[ 3 ]; 

olist[ 0 ] = new objx(); 
olist[ 1 ] = new objx(); 
olist[ 2 ] = new objx(); 

Позже вы можете изменить любого из объектов, упоминаемых просто путем индексации массива:

... 

olist[ 1 ] = onew; 
+0

Это выглядит хорошо и легко реализовать в моем коде. Спасибо. – HardCoder

3

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

Если вам нужно изменить «содержимое» объекта o1, то вам нужно будет изменить (возможно, через сеттеры) значения его атрибутов.

-1

Вы должны использовать объекты контейнера. То есть объект, содержащий ссылку на объект «objx». Простейший контейнерный объект будет массивом одного элемента, но это крайне уродливое и подверженное ошибкам решение.

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

public class ObjxContainer { 
    public Objx objx; 
} 

... 

ObjxContainer o1; 
ObjxContainer o2; 
ObjxContainer o3; 
ObjxContainer[] arr = new ObjxContainer[] { o1, o2, o3 }; 

Теперь, доступ в objx в ObjxContainer будет иметь эффект, который вы хотите:

arr[0].objx = new Objx(); 
Смежные вопросы