【Java】cloneメソッドを使ってインスタンスをコピーする!
cloneメソッドを使用することで、インスタンスをコピーすることができます。
プログラムを書いていると、同じオブジェクトが必要で、「オブジェクトをコピーできれば便利だな」と思う時があります。
その時にcloneメソッドを使うと簡単にオブジェクトをコピーできます。
今回はcloneメソッドを使って、インスタンスのコピーを行います。
cloneメソッドとは
cloneメソッドは自分自身を複製するという役割を持ち、オブジェクトのコピーを作成することができます。
cloneメソッドの書き方
cloneメソッドの構文は下記となります。
1 |
Object(インスタンスなど).clone; |
cloneの前にインスタンスなどのObjectを指定することで指定したObjectのコピーを行うことができます。
インスタンスをコピーするサンプルコード
インスタンスをコピーするサンプルコードを紹介します。
また、コピーした後にコピー先の値を変更してみます。
インスタンスをコピーする
cloneメソッドを使ってインスタンスのコピーを行います。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// インスタンスをコピーするクラス import java.util.Calendar; public class Main { public static void main(String[] args) throws Exception { // Calendarインスタンスの作成 Calendar cld = Calendar.getInstance(); System.out.print("コピー元: "); Main.print(cld); // インスタンスのコピー Calendar calCopy = (Calendar)cld.clone; System.out.print("コピー先:"); Main.print(calCopy); } // Calendarの日付を表示するメソッド static void print(Calendar cal) { System.out.println(cal.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月" + cal.get(Calendar.DATE) + "日"); } } |
出力結果
コピー元: 2020年7月29日
コピー先:2020年7月29日
cloneメソッドを使ってインスタンスをコピーすることができました。
コピー先の値を変更する
インスタンスのコピーを行った後、コピー先の値を変更してみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// インスタンスをコピーするクラス import java.util.Calendar; public class Main { public static void main(String[] args) throws Exception { // Calendarインスタンスの作成 Calendar cld = Calendar.getInstance(); System.out.print("コピー元: "); Main.print(cld); // インスタンスのコピー Calendar calCopy = (Calendar)cal.clone; System.out.print("コピー先:"); Main.print(calCopy); //コピー先の方の値を変更する System.out.println("コピー先の方の値を変更する"); calCopy.set(Calendar.YEAR, 2026); calCopy.set(Calendar.MONTH, 8); calCopy.set(Calendar.DATE, 3); System.out.print("コピー元: "); Main.print(cld); System.out.print("コピー先: "); Main.print(calCopy); } // Calendarの日付を表示するメソッド static void print(Calendar cal) { System.out.println(cld.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月" + cal.get(Calendar.DATE) + "日"); } } |
出力結果
コピー元: 2020年7月29日
コピー先:2020年7月29日
コピー先の方の値を変更する
コピー元: 2020年7月29日
コピー先: 2026年9月3日
コピー先の値を変更することができました。
また、Calendarクラスは日付を扱うクラスになります。
今回のポイント
cloneメソッドでインスタンスをコピー
インスタンスをコピーするにはcloneメソッドを使用する
• インスタンスのコピーを作成するにはcloneメソッド絵を使用する
• cloneメソッドを呼び出すにはコピー元のクラスが「Cloneable」インタフェースを実装する
• コピー先のインスタンスの値を変えた場合、コピー元のインスタンスは値が変わらないため、別のインスタンスとして存在する
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。