メインで作成されたオブジェクトがあります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 クラスと Ingredient クラス (レシピ配列が保持するオブジェクト) の両方に toString メソッドが必要であり、すべてを素敵な小さな形式で出力するために、材料に対するレシピ呼び出しが必要です。「recipeOne」オブジェクト (ペパロニ ピザと呼ばれるもの) でそれを呼び出すと、「ペパロニ ピザ: 1.0 ポンドの生地、8.0 オンスのソース、10.0 オンスのチーズ」が得られます。
次に、オブジェクト ressippi の作成に進み、ressippi のクローンに設定します。ここからはすべて問題ありません...次に、ressippi の名前を「パイナップル ピザ」に変更すると、正常に出力されますが、recipeOne の 3 つの材料オブジェクトは出力されません。保存されているはずです。