【发布时间】:2013-01-26 09:38:23
【问题描述】:
我有一个对象在我的主要Recipe recipeOne = new Recipe("Pepperoni Pizza");
这个对象是这里定义和构造的这个对象数组的一个实例!
public class Recipe implements Cloneable{
String Name;
final int INGREDIENT_ARRAY_MAX = 10;
Ingredient Recipe[] = new Ingredient[INGREDIENT_ARRAY_MAX];
public Recipe(String name){
Name = name;
}
因此,我希望使用 Recipe ressippi = (Recipe) recipe.clone(); 行制作此对象的深层副本,然后它会将我发送到这里!
public Object clone(){
Recipe cloneRec = new Recipe(Name);
return cloneRec;
}
我知道这是一个浅拷贝,因为该方法只传递引用,所以如果我要尝试对作为 recipeOne 克隆的新对象进行名称更改...它会同时更改它们的名称。显然我不想这样,我对此很迷茫,有人可以帮忙吗?
编辑:@Rohit Jain
Recipe 类和成分类(配方数组包含的对象)都具有 toString 方法,并且 recipes 调用成分以便以漂亮的小格式将其全部打印出来。当我在我的“recipeOne”对象(称为意大利辣香肠比萨)上调用它时,我得到“意大利辣香肠比萨:1.0 磅面团、8.0 盎司酱汁、10.0 盎司奶酪”
然后我继续制作 ressippi 对象并将其设置为 recipeOne 的克隆,所以从这里开始一切都很好......然后我将 ressippi 的名称更改为“Pineapple Pizza”,打印效果很好,但它不打印 3 种成分recipeOne 存储的对象,它应该这样做!
【问题讨论】:
-
看到这个答案:link
-
new String(name)怎么样?
标签: java arrays object deep-copy