final class Immutable {
private final Mutable mutableClass;
public Immutable(Mutable mutableClass) {
super();
this.mutableClass = mutableClass;
}
public Mutable getMutableClass() throws CloneNotSupportedException {
return (Mutable) mutableClass.clone();
}
}
class Mutable implements Cloneable {
public String variable;
public Mutable(String variable) {
super();
this.variable = variable;
}
public String getVariable() {
return variable;
}
public void setVariable(String variable) {
this.variable = variable;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Mutable{" +
"variable='" + variable + '\'' +
'}';
}
}
public class MainClass {
public static void main(String[] args) throws Exception {
Immutable immutable = new Immutable(new Mutable("Some String"));
Mutable mutable = immutable.getMutableClass();
System.out.println(mutable);
mutable.setVariable("Updated String");
System.out.println(immutable.getMutableClass());
}
}