Временное решение для псевдонимов переменных Java - PullRequest
4 голосов
/ 25 апреля 2009

Я недавно перешел на Java, но у меня были некоторые проблемы с псевдонимами переменных. Я искал везде, но я не могу найти правильный способ скопировать содержимое одного объекта в другой объект без ссылки на тот же объект. У кого-нибудь есть предложения?

Редактировать: Что, если это int, с которыми у меня проблемы с алиасами? Должен ли я в первую очередь избегать подобных ситуаций? Если да, то как?

Ответы [ 5 ]

10 голосов
/ 25 апреля 2009

Если ваш класс реализует интерфейс Clonable , то вы можете использовать метод Object.clone () для создания печатной копии. Запись Wikipedia содержит несколько хороших деталей.

Альтернативой является использование копирующих конструкторов , которые согласно этой странице более безопасны.

4 голосов
/ 25 апреля 2009

Зависит от «контента». Например, вы не можете просто скопировать FileInputStream, а затем предположить, что оба будут продолжать загрузку из одного и того же файла.

По сути, есть два способа: если класс поддерживает интерфейс «Cloneable», вы можете клонировать его, вызвав clone (). Если нет, то он часто имеет конструктор копирования, который копирует данные из другого объекта.

Обычно у вас получается неглубокая копия (т.е. все поля класса копируются, но они указывают на один и тот же объект).

С другой стороны, многие объекты разработаны как неизменяемые (например, класс String), и нет необходимости копировать такой объект, так как он все равно не может быть изменен.

2 голосов
/ 30 ноября 2012

Другой вариант - создать класс для создания неизменяемых объектов:
http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html

Это исключает необходимость клонирования или конструктора копирования, поскольку объект не может быть изменен после его создания. Таким образом, несколько переменных могут указывать на один и тот же объект, но ни одна из них не может изменить состояние объекта.

1 голос
/ 26 апреля 2009

Вы не можете иметь неявную ссылку на ссылку в Java, поэтому вы не можете использовать псевдоним для переменной.

Возможно, если вы объясните, чего вы пытаетесь достичь, мы можем помочь сделать это без "псевдонимов"

Edit: вам действительно нужно объяснить, что вы имеете в виду, используя псевдоним int. Значение int является анонимным во время выполнения, поэтому создавать псевдонимы не имеет никакого смысла.

1 голос
/ 25 апреля 2009

java.lang.Cloneable - это то, что вы ищете.

...