在這篇文章中,我們將解釋java中的不可變類別。此外,我們還將看到不可變類的用途。將有 java 程式碼範例展示如何在 java 中建立不可變類別。不可變類別是其內容不能更改的類別。
以下是關於不可變類別的一些要點:
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
在使用此類之前,了解不可變類別是如何創建的非常重要。以下是創建課程時需要牢記的要點:
以下是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中文網其他相關文章!