この記事では、Java における immutable クラスについて説明します。また、不変クラスの使用法も見ていきます。 Java で不変クラスを作成する方法を示す Java コード例があります。不変クラスとは、内容を変更できないクラスです。
次に、不変クラスに関する重要な点をいくつか示します:
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
このクラスを使用する前に、不変クラスがどのように作成されるかを理解しておくことが重要です。クラスを作成する際に留意すべき重要な点は次のとおりです:
Java における不変クラスの主な用途は次のとおりです。
リストされた利点とは別に、不変クラスを使用するとパフォーマンスの問題が発生する可能性があります。したがって、スレッド セーフやその他の機能が重要でない場合は、パフォーマンス向上のために可変クラスの使用を検討できます。
以下に挙げる例を示します:
次に、Java での不変クラスの作成を示す Java コード例を見ていきます。以下は、Java で不変クラスがどのように作成されるかを示す Java コード例です。
コード:
package com.edubca.immutabledemo; public final class ImmutableDemo { final String studentName; final int rollNumber; public ImmutableDemo (String studentName, int rollNumber) { this.studentName = studentName; this.rollNumber = rollNumber; } public String getStudentName() { return studentName; } public int getRollNumber() { return rollNumber; } public static void main(String[] args) { ImmutableDemo obj = new ImmutableDemo ("John" , 100); // Since no getters are available contents cannot be modified. // Also as variables are declared final they cannot be modified System.out.println("Name is " + obj.getStudentName()); System.out.println("Roll Number is " + obj.getRollNumber()); } }
出力:
上記のコードは、クラス メンバーとして変更可能なオブジェクトを含まない不変クラスの作成を示しています。
次に、変更可能なオブジェクトをメンバーとして持つ不変クラスを作成する方法を見ていきます。この場合、不変性を維持するには、いくつかの特別な処理が必要です。
不変クラス内の可変オブジェクトの問題:
これは、変更可能なメンバーを含む不変クラスの作成を示す通常のコード例です。
コード:
package com.edubca.immutabledemo; import java.util.Date; import java.text.SimpleDateFormat; public final class ImmutableDemo { final String studentName; final int rollNumber; final Date birthDate; public ImmutableDemo (String studentName, int rollNumber, Date birthDate) { this.studentName = studentName; this.rollNumber = rollNumber; this.birthDate=birthDate; } public String getStudentName() { return studentName; } public int getRollNumber() { return rollNumber; } public Date getBirthDate() { return birthDate; } public static void main(String[] args) throws Exception { String birthDate= "31/09/1997"; ImmutableDemo obj = new ImmutableDemo ("John" , 100, new SimpleDateFormat("dd/MM/yyyy").parse(birthDate)); System.out.println("Name is " + obj.getStudentName()); System.out.println("Roll Number is " + obj.getRollNumber()); System.out.println("Birth date is " + obj.getBirthDate()); obj.getBirthDate().setTime(1000); System.out.println("After changing birth date>>>>>>>>>>>>"); System.out.println("Name is " + obj.getStudentName()); System.out.println("Roll Number is " + obj.getRollNumber()); System.out.println("Birth date is " + obj.getBirthDate()); } }
出力:
上記の出力から、生年月日が変更されたため、オブジェクトの内容が変更されたことがわかります。これは不変クラスのルールに違反します。
不変クラス内の可変オブジェクトの問題の解決策:
このようなケースに対処するには、コードにいくつかの変更を実装する必要があります。変更されたコードでは、取得メソッドから可変オブジェクトを返すときに、元のオブジェクトは返されません。代わりに、オブジェクトのクローンを返します。したがって、クローン オブジェクトに変更を加えても、元のオブジェクトには影響しません。変更されたコードは次のとおりです:
コード:
package com.edubca.immutabledemo; import java.util.Date; import java.text.SimpleDateFormat; public final class ImmutableDemo { final String studentName; final int rollNumber; final Date birthDate; public ImmutableDemo (String studentName, int rollNumber, Date birthDate) { this.studentName = studentName; this.rollNumber = rollNumber; this.birthDate=birthDate; } public String getStudentName() { return studentName; } public int getRollNumber() { return rollNumber; } public Date getBirthDate() { return (Date)birthDate.clone(); } public static void main(String[] args) throws Exception { String birthDate= "31/09/1997"; ImmutableDemo obj = new ImmutableDemo ("John" , 100, new SimpleDateFormat("dd/MM/yyyy").parse(birthDate)); System.out.println("Name is " + obj.getStudentName()); System.out.println("Roll Number is " + obj.getRollNumber()); System.out.println("Birth date is " + obj.getBirthDate()); obj.getBirthDate().setTime(1000); System.out.println("After changing birth date>>>>>>>>>>>>"); System.out.println("Name is " + obj.getStudentName()); System.out.println("Roll Number is " + obj.getRollNumber()); System.out.println("Birth date is " + obj.getBirthDate()); } }
出力:
上記の出力から、日付値に変化がないことがわかります。したがって、クラスの不変性はそのまま残ります。
上記の説明から、Java の不変クラスについて明確に理解できました。また、その利点も確認しました。
以上がJavaの不変クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。