. Добавляя к ответу, предоставленному @ nsfyn55, необходимо также учитывать следующие аспекты для неизменяемости объекта, которые относятся к prime важность
Рассмотрим следующие классы:
public final class ImmutableClass {
private final MutableClass mc;
public ImmutableClass(MutableClass mc) {
this.mc = mc;
}
public MutableClass getMutClass() {
return this.mc;
}
}
public class MutableClass {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public class MutabilityCheck {
public static void main(String[] args) {
MutableClass mc = new MutableClass();
mc.setName("Foo");
ImmutableClass iMC = new ImmutableClass(mc);
System.out.println(iMC.getMutClass().getName());
mc.setName("Bar");
System.out.println(iMC.getMutClass().getName());
}
}
Ниже приведен вывод из MutabilityCheck:
Foo
Bar
Важно отметить, что
public final class ImmutableClass {
private final MutableClass mc;
public ImmutableClass(MutableClass mc) {
this.mc = new MutableClass(mc);
}
public MutableClass getMutClass() {
return this.mc;
}
}
public class MutableClass {
private String name;
public MutableClass() {
}
//copy constructor
public MutableClass(MutableClass mc) {
this.name = mc.getName();
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
по-прежнему не гарантирует полную неизменность, поскольку из класса MutabilityCheck все еще действует следующее:
iMC.getMutClass().setName("Blaa");
Foo
Foo
Поскольку эта опция связана с опцией timeout
.
В spawn
вы должны решить, когда вы убьете процесс.
Пример: ( из документа )
const { spawn } = require('child_process');
const grep = spawn('grep', ['ssh']);
grep.on('close', (code, signal) => {
console.log(
`child process terminated due to receipt of signal ${signal}`);
});
// Send SIGHUP to process
grep.kill('SIGHUP');