jmasm 发表于 2008-5-21 09:49

使用clone方法报错

//不要直接返回可变对象的引用,如果这样,就违反了封装的原则.
//没起到保护作用.私有对象的内容可能会被更改.
//如果需要返回一个可变对象的引用,应该对它进行clone后,返回clone后的引用.
class  People
{
        private StringBuffer name;
        public People(String n)
        {
                name=new StringBuffer(n);
        }
        public StringBuffer getName()
        {
                return name;
        }
        public StringBuffer getName1()
        {
                return (StringBuffer)name.clone();
        }
        public void show()
        {
                System.out.println(name);
        }
}
public class PeopleTest
{
        public static void main(String[] args)
        {
                People p=new People("李四");
                StringBuffer sb=p.getName();
                sb.append("好");  //people的私有数据在对象外被更改
                p.show();
               
                People p1=new People("张三");
                StringBuffer sb1=p.getName1();
                sb1.append("好");  //返回的是克隆后的引用,所以这里的修改对类中成员没有影响
                p1.show();
        }
}

---------- javac ----------
PeopleTest.java:17: clone() 可以在 java.lang.Object 中访问 protected
                return (StringBuffer)name.clone();
                                         ^

sunkaidong 发表于 2008-5-21 10:45

stringbuffer 没有clone方法

jmasm 发表于 2008-5-21 16:15

谢谢

页: [1]

编程论坛