Как клонировать объект в android?

Извините за новичков, но какой был бы лучший способ скопировать/клонировать объект в java/android?

rlBodyDataObj rlbo = bdoTable.get(name);

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

Спасибо!

Ответ 1

Убедитесь, что класс DataObj реализует Cloneable и добавляет следующий метод

protected Object clone() throws CloneNotSupportedException {
        return super.clone();
}

Затем вы должны иметь возможность вызвать (DataObj) rlBodyDataObj.clone(); чтобы получить чистую копию (обратите внимание на листинг).

Ответ 2

class Test implements Cloneable
  {
   ...
      public Object clone()
      {
          try
      {
              return super.clone();
          }
      catch( CloneNotSupportedException e )
      {
              return null;
          }
      } 
  ...
  }

Ответ 3

вы можете реализовать Parcelable (легко со студийным плагином), а затем

public static <T extends Parcelable> T copy(T orig) {
    Parcel p = Parcel.obtain();
    orig.writeToParcel(p, 0);
    p.setDataPosition(0);
    T copy = null;
    try {
        copy = (T) orig.getClass().getDeclaredConstructor(new Class[]{Parcel.class}).newInstance(p);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return copy;
}

Ответ 4

Иногда вам нужно изменить некоторые поля перед возвратом из метода clone().

Отметьте это: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#clone(). Для удобства я вставил соответствующую часть:

"По соглашению объект, возвращаемый этим методом, должен быть независимо от этого объекта (который клонируется). Для достижения этой цели независимости, может потребоваться изменить одно или несколько полей объект, возвращенный super.clone перед его возвратом. Как правило, это означает копирование любых изменяемых объектов, которые составляют внутреннюю" глубокую структуры "клонируемого объекта и замены ссылок на эти объекты со ссылками на копии. Если класс содержит только примитивные поля или ссылки на неизменяемые объекты, то это обычно случай, когда никакие поля в объекте, возвращаемые super.clone необходимо изменить."