Вы можете сделать следующее:
this.activatedRoute.queryParams.subscribe((params: Params) => {
this.param = params['name'];
}).unsubscribe();
}
Это чувствительно к регистру
Существует два популярных подхода. Нужно обеспечить clone
метод, как Вы упомянули, как так.
public class C implements Cloneable {
@Override public C clone() {
try {
final C result = (C) super.clone();
// copy fields that need to be copied here!
return result;
} catch (final CloneNotSupportedException ex) {
throw new AssertionError();
}
}
Обращают внимание на "поля копии... здесь!" часть. Начальная буква result
является только мелкой копией, означая что, если будет ссылка на объект, то и оригинал и result
совместно использует тот же объект. Например, если бы C
содержит private int[] data
, Вы, вероятно, хотели бы скопировать это.
...
final C result = (C) super.clone();
result.data = data.clone();
return result;
...
Примечание, что Вы не должны копировать примитивные поля как их содержание, уже копируется, или неизменные объекты, поскольку они не могут измениться так или иначе.
второй подход должен предоставить конструктору копии.
public class C {
public C(final C c) {
// initialize this with c
}
}
Или фабрика копии.
public class C {
public static C newInstance(final C c) {
return new C(c);
}
private C(final C c) {
// initialize this with c
}
}
Оба подхода имеют свои соответствующие свойства. clone
хорошо, потому что это - метод, таким образом, Вы не должны знать точный тип. В конце необходимо всегда заканчивать с "идеальной" копией. Конструктор копии хорош, потому что у вызывающей стороны есть шанс решить, как видно Наборами Java.
final List c = ...
// Got c from somewhere else, could be anything.
// Maybe too slow for what we're trying to do?
final List myC = new ArrayList(c);
// myC is an ArrayList, with known properties
я рекомендую выбрать любой подход, какой бы ни подходит Вам лучше.
я использовал бы другие подходы, как отражающее копирование или непосредственная сериализация/десериализация, в модульных тестах только. Мне они чувствуют себя менее подходящими для производственного кода, главным образом из-за проблем производительности.
Другая опция при помощи Конструктора Копии (от Методы Java ):
public final class Galaxy {
public Galaxy (double aMass, String aName) {
fMass = aMass;
fName = aName;
}
/**
* Copy constructor.
*/
public Galaxy(Galaxy aGalaxy) {
this(aGalaxy.getMass(), aGalaxy.getName());
//no defensive copies are created here, since
//there are no mutable object fields (String is immutable)
}
/**
* Alternative style for a copy constructor, using a static newInstance
* method.
*/
public static Galaxy newInstance(Galaxy aGalaxy) {
return new Galaxy(aGalaxy.getMass(), aGalaxy.getName());
}
public double getMass() {
return fMass;
}
/**
* This is the only method which changes the state of a Galaxy
* object. If this method were removed, then a copy constructor
* would not be provided either, since immutable objects do not
* need a copy constructor.
*/
public void setMass( double aMass ){
fMass = aMass;
}
public String getName() {
return fName;
}
// PRIVATE /////
private double fMass;
private final String fName;
/**
* Test harness.
*/
public static void main (String... aArguments){
Galaxy m101 = new Galaxy(15.0, "M101");
Galaxy m101CopyOne = new Galaxy(m101);
m101CopyOne.setMass(25.0);
System.out.println("M101 mass: " + m101.getMass());
System.out.println("M101Copy mass: " + m101CopyOne.getMass());
Galaxy m101CopyTwo = Galaxy.newInstance(m101);
m101CopyTwo.setMass(35.0);
System.out.println("M101 mass: " + m101.getMass());
System.out.println("M101CopyTwo mass: " + m101CopyTwo.getMass());
}
}
Некоторые опции:
Cloneable
для объекта и поместить clone()
метод как общественность. Посмотрите полное объяснение здесь: http://www.cafeaulait.org/course/week4/46.html Serializable
интерфейс для объекта и всех его полей. XStream
для выполнения сериализации через XML - Вы ничего не должны будете реализовывать здесь. Joshua Bloch имеет некоторые интересные вещи сказать о cloneable. В зависимости от размера/конструкции объекта я добавил бы конструктора копии к объекту или сериализировал бы/десериализовал бы использование одного из упомянутых выше решений.
Для тестового кода Сериализация, возможно, самый безопасный ответ, особенно если объект уже является сериализуемым Apache попытки палата общин SerializationUtils для реализации.