• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Listをフィールドに持つクラスの複製が欲しいです。)

Listをフィールドに持つクラスの複製方法について

このQ&Aのポイント
  • Listをフィールドに持つクラスの複製が欲しいが、コピー元を変更してもコピーしたものは変わらない
  • Serializableを実装してディープコピーを試みたが、リストの内容が変わってしまった
  • コピーメソッドを作らずにリストを含むオブジェクトをコピーする方法を教えて欲しい

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

System.out.println("copy: " + copyBook.content[1] + " " + cloneBook.list.get(0)); の行は, これでいいんでしょうか? ひょっとして copyBook.list.get(0) だったりしませんか?

syakko
質問者

お礼

ありがとうございます!! 一発解決でした。ケアレスミス。。失礼しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaの出力結果について

    javaのプログラムを記述してますが、出力結果がnullになってしまいます。 解決策を教えて下さい。 ------出力結果------- null null null null null null -----------下記、ソースになります。------------ public class LibApp { public static void main(String[] args) { Library my_lib= new Library(); my_lib.addBook(new Book("吾輩は猫である","夏目 漱石","小説")); my_lib.addBook(new Book("奥の細道","松尾 芭蕉","小説")); my_lib.showBooks(); } } import java.util.ArrayList; import java.util.List; public class Library { List<Book> bList; public Library() { bList=new ArrayList<Book>(); } public void showBooks() { for (Book str : bList) { str.showBook(); } } public void addBook(Book book) { this.bList.add(book); } } public class Book { String title; String author; String content; public Book(String title, String author, String content) { title = this.title; author = this.author; content = this.content; } public void showBook() { System.out.println(title); System.out.println(author); System.out.println(content); } }

    • ベストアンサー
    • Java
  • Listインターフェースの使用法

    Listインターフェースの使い方ですが、 List list; String a = new String("AAA"); String b = new String("BBB"); list.add(a); list.add(b); というふうにするとlistは初期化されていませんとエラーになります。 また、Listに格納したオブジェクトの取り出し方も教えてください。

  • C# Listクラスにクラスを追加したいがエラー

    以下のようなコードを書いたのですが (A)(B)の箇所で (A) error CS1513: } が必要です。 (B) /error CS1022:型、名前空間の定義、またはファイルの終わりが必要です。 というエラーになるのですが、なにが間違っているのでしょうか。 --------------------------------------------------- using System; using System.Collections.Generic; namespace My {  class MyClass  {   public static void Main()   { // <--- (A)    public List<Book> myList = new List<Book>    {     new Book(){ title = "ABC", price = 1000 },     new Book(){ title = "DEF", price = 2000 }    };   }  }  class Book  {   //プロパティの自動実装   public string title { get; set; }   public decimal price { get; set; }  } } // <--- (B) ---------------------------------------------------

  • Java プログラミング エラー

    public class kadai1 { public static void main(String[] arg){ /* Book クラスからインスタンスを生成*/ Book myBook = new Book("The Java Tutorial",55); System.out.println("My book title = " + myBook.getTitle()); System.out.println("My book title = " + myBook.title); System.out.println("My book price = " + myBook.getPrice()); System.out.println("My book price = " + myBook.getYenPrice()); /*Book クラスからインスタンスを生成*/ Book yourBook = new Book("The Java Programming Language",40); System.out.println("Your book title = " + yourBook.getTitle()); System.out.println("Your book price = " + yourBook.getPrice()); } } class Book{ //クラスbook の宣言 String title; //題名 private int price; // 価格(ドル) Book(String t, int p){ //コンストラクタ title = t; //題名の設定 price = p; //価格の設定 } public String getTitle(){ // 題名の取得 return title; } public int getPrice(){ // 価格の取得 return price; } public double getYenPrice(){ return price*111.58; } } このとき「Exception in thread "main" java.lang.NoSuchMethodError: Book.getYenPrice()D」 というエラーがでるんですが、これはgetYenPrice()というメソッドはないといってきてるんでしょうか? 作ってるんですがどういうことなんでしょう。

    • ベストアンサー
    • Java
  • 現在のクラスを生成したクラスに渡したい

    親クラスで生成した子クラス(ダイアログ)から親クラス(ダイアログ)の関数などを使えるようにしたいと思っております。 ちなみに継承クラスで親クラスの関数を使うのではなく、親クラスそのもの(ダイアログ表示)を子クラスから変更できるようにしたいです。 (簡単になりますが…)プログラムの構成は以下のようになっており、thisポインタを渡すか所でエラーが起こってしまいます。 ------------------------------------------------ class AAA { BBB *b; void classBBB{ b = new BBB(this); // こういうことがしたいが、できない void fun( int a ); // ダイアログの表示が変更する(予定) }; class BBB { AAA *a; BBB(AAA *pDlg){ a==pDlg; } void fun(){ int b; a->fun(b); } // 親クラスの関数を呼び出したい }; ------------------------------------------------ ただし、class Aとclass Bを生成する上位階層のプログラム構築をすることはなしとします。 ------------------------------------------------ こんな感じ AAA *a = new AAA(); BBB *b = new BBB(a); ------------------------------------------------ どうしてもclass AAAからclass BBB呼び出したいと思ってます。 何か良い解決法があれば、教えていただきたいです。 宜しくお願い致します。

  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • オブジェクトの関連について

    クラスAAAとクラスBBBをインスタンス化し、それぞれ、aとbのオブジェクトとします。 mainメソッドから、bのbmethメソッドを呼び出し、さらに、Amethメソッドを呼び出し また、mainからもaのAmethメソッドを呼び出し可能にする方法はありませんでしょうか? まだ、Java初心者なもので説明も不十分かと思いますがよろしくお願いします。 class AAA{ void Ameth() { System.out.println("Aメソッド"); } } class BBB{ public AAA a; void bmeth(){ a.Ameth(); } } public class test{ public static void main(String arg[]) { AAA a = new AAA(); BBB b = new BBB(); b.bmeth(); a.Ameth(); } }

  • 親クラスと子クラスのフィールドとメソッドについて

    親クラスと子クラスのフィールドとメソッドについて 以下のサンプルソースを実行した時の動作の原理について 教えてください。 oya型変数にkoクラスのインスタンスを作成した場合、 メソッドはkoクラスのものなのに、 フィールドはoyaクラスのものになるということが イマイチすっきり理解できません。 どういうことなんでしょうか。 ------------------------------------------------------- [ソース] public class exec { public static void main( String args[]){ oya obj = new ko(); System.out.println(obj.str_field); obj.disp_field(); } } public class oya{ String str_field="親実行"; public void disp_field(){ System.out.println(str_field); } } public class ko extends oya { String str_field = "子実行"; public void disp_field(){ System.out.println(str_field); } } ------------------------------------------------------- [実行結果] > 親実行 > 子実行 -------------------------------------------------------

    • ベストアンサー
    • Java
  • 初心者なのですが

    複数の著者の名前を保持するフィールドauthors(String型の配列で、要素数は最大10とする)を追加し、複数の著者の名前を一度に設定するメソッドvoid setAuthors(Vector names)を追加する。引数names(java.util.Vectorクラス)の各要素は著者名を表す文字列とし、このメソッドが正常に動作していることをmain関数で確認するということをやっているのですがエラーが出て上手く出来ません。どなたか教えてもらえないでしょうか?以下にソースとエラーメッセージを載せています。 import java.util.Vector; public class javaprog { public static void main(String[] args) { /* Bookクラスからインスタンスを生成 */ Book myBook = new Book("The Java Tutorial", 55, 1999); System.out.println("My book title = " + myBook.getTitle()); System.out.println("My book title = " + myBook.title); System.out.println("My book price = $" + myBook.getPrice()); System.out.println("My book Yenprice = ¥" + myBook.getYenPrice()); System.out.println("My book year = " + myBook.getYear()); /* Bookクラスからインスタンスを生成 */ Book yourBook = new Book("The Java Programming Language", 40, 1998); System.out.println("Your book title = " + yourBook.getTitle()); System.out.println("Your book price = $" + yourBook.getPrice()); System.out.println("Your book Yenprice = ¥" + yourBook.getYenPrice()); // 追加したところ Vector names = new Vector(); // コレクションクラスVectorのインスタンスの生成 names.add(new String("Java")); nemes.add(new String("Programming")); nemes.add(new String("Language")); Book theirBook = new Book("The world of Java Book", 30, 2000); theirBook.setAuthors(names); } } // ここまで class Book { // クラスBookの宣言 String title; // 題名 private int price; // 価格(ドル) private int year; // 出版年(西暦) String authors[10]; // 複数の著者の名前を保持する Book(String t, int p, int y) { // コンストラクタ title = t; // 題名の設定 price = p; // 価格の設定 year = y; // 出版年の設定 } public String getTitle() { // 題名の取得 return title; } public int getPrice() { // 価格の取得 return price; } public double getYenPrice() { // 円での価格の取得 double yenPrice = price * 111.58; return yenPrice; } public int getYear() { // 出版年の取得 return year; } public void setAuthors(Vector names) { authors = names; } } % javac javaprog.java javaprog.java:37: ']' がありません。 String authors[10]; // 複数の著者の名前を保持する ^ エラー 1 個 %

    • ベストアンサー
    • Java
  • 「自作クラスの型」にキャストする方法について。

    「自作クラスの型」にキャストする方法について。 Java初心者ですが、よろしくお願いします。 class AAA class BBB ※クラスAAAはクラスBBBのスーパークラス(直属のスーパークラスとは限らない)とします。 class CCC という3つのクラスがあるとして、 この場合、 class CCC{ AAA var; BBB bbb; void test(){ bbb = new BBB(); var = (AAA)bbb; //---★ } } というような、キャストは可能ですよね?(←確認1) 次に(確認1に問題が無い場合)、 クラスAAAとクラスBBBの格納場所(パッケージ関連の話です)について、 AAAとBBBがどういう位置関係にあるときに、上記のキャストは可能になるのでしょうか? AAAとBBBが同一パッケージ内にある時だけでしょうか?(←確認2[質問の核]) で、さらに、 上記の「---★」の所で、 AAAクラスにキャストする処理をしていますが、 この時、AAAクラスのコンストラクタは呼ばれるのでしょうか? (AAAをnewしていないけれど、キャスト処理でnewしたのと同じことになったりしますか?) また、これと同様の質問になりますが、 仮に、クラスAAAの設計が、クラスAAAのインスタンスが生成された場合に、 何らかのコールバック処理が行われるような設計の場合、 この (AAA)bbb というキャストによって、想定しているコールバック処理 は行われたりしますでしょうか?(←確認3) 初心者らしからぬ質問かもしれませんが、 どなたか、どうか分かりやすく教えて下さい。

    • ベストアンサー
    • Java