Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เราจะสร้างแผนที่ที่ไม่สามารถแก้ไขได้ใน Java 9 ได้อย่างไร


แผนที่ที่ไม่สามารถแก้ไขได้ เป็นคนที่มี กุญแจ และ คุณค่า ไม่สามารถ เพิ่ม , ลบแล้ว หรือ อัปเดต เมื่อมีการสร้างตัวอย่างแผนที่ที่ไม่สามารถแก้ไขได้ วิธีการโรงงานแบบคงที่:Map.of() และ Map.ofEntries() จากแผนที่ที่ให้วิธีที่สะดวกในการสร้างแผนที่ที่ไม่สามารถแก้ไขได้ใน Java 9 .

ตัวอย่างแผนที่ที่สร้างโดยใช้ Map.of() และ Map.ofEntries() วิธีการมีลักษณะดังต่อไปนี้

  • แผนที่ที่ส่งคืนโดยวิธีการจากโรงงานนั้นตามอัตภาพไม่เปลี่ยนรูปแบบ . แปลว่า แป้น และ คุณค่า ไม่สามารถ เพิ่ม , ลบแล้ว หรือ อัปเดต . การเรียกใช้เมธอด mutator ใดๆ บนแผนที่ทำให้เกิด UnsupportedOperationException .
  • หากมี คีย์/ค่า ของแผนที่เองไม่แน่นอน อาจทำให้ Map ทำงานไม่สอดคล้องกัน หรือเนื้อหาที่ดูเหมือนจะเปลี่ยนไป
  • แผนที่ที่ไม่เปลี่ยนรูปไม่อนุญาตให้ null กุญแจ และ คุณค่า . หากพยายามสร้างด้วยคีย์หรือค่า null ก็จะส่ง NullPointerException .
  • ที่ ซ้ำกัน กุญแจ ถูกปฏิเสธในเวลาที่สร้างเอง การส่งคีย์ที่ซ้ำกันไปยังเมธอดโรงงานแบบสแตติกทำให้ IllegalArgumentException .
  • ที่ ไม่เปลี่ยนรูป แผนที่ สามารถจัดลำดับได้ หากคีย์และค่าทั้งหมดเป็นแบบซีเรียลไลซ์ได้
  • ลำดับการวนซ้ำของการจับคู่ ไม่ได้ระบุ และอาจมีการเปลี่ยนแปลง

ไวยากรณ์

Map.of(k1, v1, k2, v2)
Map.ofEntries(entry(k1, v1), entry(k2, v2),...)

ตัวอย่าง Map.of()

import java.util.Map;
public class UnmodifiableMapTest {
   public static void main(String[] args) {
      Map<String, String> empMap = Map.of("101", "Raja", "102", "Adithya", "103", "Jai", "104", "Chaitanya");
      System.out.println("empMap - " + empMap);
      empMap.put("105", "Vamsi");      // throws UnsupportedOperationException
   }
}

ผลลัพธ์

empMap - {104=Chaitanya, 103=Jai, 102=Adithya, 101=Raja}
Exception in thread "main" java.lang.UnsupportedOperationException
         at java.base/java.util.ImmutableCollections.uoe(Unknown Source)
         at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(Unknown Source)
         at UnmodifiableMapTest.main(UnmodifiableMapTest.java:7)


ตัวอย่าง Map.ofEntries()

import java.util.Map;
import static java.util.Map.entry;
public class UnmodifidMapTest {
   public static void main(String[] args) {
      Map<String, String> empMap = Map.ofEntries(entry("101", "Raja"), entry("102", "Adithya"), entry("103", "Jai"), entry("104", "Chaitanya"));
      System.out.println("empMap - " + empMap);
   }
}

ผลลัพธ์

empMap - {102=Adithya, 101=Raja, 104=Chaitanya, 103=Jai}