У меня есть класс SBContainer
, в котором есть StringBuffer
член mySB
. Я реализую Cloneable
для SBContainer
, как это -
SBContainer implements Cloneable {
public StringBuffer mySB;
public SBContainer() {
mySB = new StringBuffer("This is a test string");
}
public Object clone() throws CloneNotSupportedException {
SBContainer cloned = (SBContainer)super.clone();
return cloned;
}
}
Теперь я создаю объект sbc1
для MyContainer
и его клон sbc2
. Похоже, контейнер mySB
не клонирован; sbc1.mySB
и sbc2.mySB
указывают на один и тот же объект StringBuffer
. Я тестировал, используя следующий класс -
public class SBContainerTest {
public static void main(String[] args) {
SBContainer sbc1 = new SBContainer();
SBContainer sbc2 = null;
try {
sbc2 = (SBContainer)sbc1.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
sbc1.mySB.append(" ...something appended");
System.out.println(sbc2.mySB);
}
}
EDIT:
Выход был: This is a test string ...something appended
Итак, я попытался клонировать mySB
вот так -
cloned.mySB = (StringBuffer)mySB.clone();
... и я получаю эту ошибку -
SBContainerTest.java:8: clone() has protected access in java.lang.Object
cloned.mySB = (StringBuffer)mySB.clone();
^
1 error
Итак, как мне этого добиться? Как я могу клонировать изменяемый член класса, который реализует Cloneable
?
Спасибо.