2014-11-04 60 views
-1

我在创建一个好的复制构造函数时遇到了问题。我希望能够创建一个新的对象,该对象在它作为更改副本的对象时不会更改。问题是,我的PizzaOrderNew实例变量是另一个类的所有对象,具有实例变量,奶酪,大小,火腿,意大利辣香肠的比萨饼以及典型的访问器和增变器。 我试过了:复制构造函数有问题

public PizzaOrderNew(PizzaOrderNew otherPizzaOrderNew) 
{ 
    pizza01.setSize(otherPizzaOrderNew.pizza01.getSize()); 
    pizza01.setHam(otherPizzaOrderNew.pizza01.getHam()); 
    pizza01.setCheese(otherPizzaOrderNew.pizza01.getCheese()); 
    pizza01.setPepperoni(otherPizzaOrderNew.pizza01.getPepperoni());   
} 

但是这会引发异常。我已经试过:

public PizzaOrderNew(PizzaOrderNew otherPizzaOrderNew) 
{ 
    pizza01 = otherPizzaOrderNew.pizza01;   
} 

但是这使得它如此当原始确实

+1

你可以发布PizzaOrderNew类,它给出了什么异常? – 2014-11-04 00:08:48

+0

第二个片段“失败”,因为你真正分配的是对对象的引用,而不是对象本身的值。换句话说,你的副本根本就不是副本。 – tommyo 2014-11-04 00:09:11

+0

Dici是正确的,我得到一个空指针异常。我正在尝试Dici的解决方案。我已经将pizza01初始化为默认值,并且它仍然会生成一个NullPointerException。我相信Dici和tommyo都是正确的,只有一小部分不见了。你有没有更多关于班级的信息?非常感谢你们 – user3624385 2014-11-04 01:52:25

回答

0

我猜你得到一个NullPointerException因为pizza01未初始化拷贝变化。用一些默认值初始化它,然后在第一个代码片段中设置它的属性。