- vừa được xem lúc

Immutable class trong java

0 0 14

Người đăng: Minh Phạm Duy

Theo Viblo Asia

Như chúng ta đã biết trong suốt quá trình phát triển và bảo trì phần mềm, việc đảm bảo tính an toàn và đáng tin cậy của dữ liệu là một trong những ưu tiên hàng đầu. Một trong những cách hiệu quả để đạt được mục tiêu này trong Java là sử dụng immutable class.

Trong bài viết này, chúng ta sẽ thảo luận về cách xây dựng và sử dụng immutable cùng theo đó là lợi ích và các trường hợp sử dụng phổ biến, bao gồm việc sử dụng final fields, deep copy, và các phương pháp bảo vệ dữ liệu khác.

Trước tiên, đi sơ về định nghĩa immutable và cụ thể là immutable object nhưng mọi người vẫn thường dùng

Immutable nghĩa là sau khi khởi tạo đối tượng thì giá trị của object ( state ) sẽ không bị thay đổi bằng bất kì hình thức nào.

Ví dụ: String trong java

Vậy với tính chất của nó thì sẽ đem lại tác dụng gì ?

-thread safety: bởi vì giá trí của immutable sẽ không bị thay đổi . Từ đó giúp tận dụng nó mà không cần phải synchornized hay lock trong môi trường đa luồng

-consistency: giá trị của immutable sẽ không bị thay đổi trong suốt vòng đời của đối tượng. Từ đó, lập trình viên có thể quản lý đối tượng dễ dàng hơn.

-security: tất nhiên immutable sẽ giúp nâng cao tính bảo mật cho ứng dụng r

-debugging: giúp cho việc debug dễ dàng hơn

⇒ Với các ứng dụng quan trọng như vậy thì immutable được dùng rất nhiều trong các ứng dụng khác nhau

-Vậy đi vào chủ đề chính thì immutable trong class khác gì ? Đúng rồi, nó tương tự như immutable object giúp ta đạt được tính bất biến.

  • Khai báo class là final và các field thuộc tính là private final để đảm bảo không truy cập và sửa đổi được
  • Không cung cấp setter method hay bất kì method nào khác mà làm thay đổi giá trị thuộc tính
  • Sử dụng deep copy khi constructor
  • Sủ dụng copy khi clone object thay vì trả ra trực tiếp

Lý thuyết vậy đủ rồi, cùng đi vào ví dụ nào bằng cách tạo 1 immutable class:

import java.util.Collections;
import java.util.HashMap;
import java.util.Map; public final class ImmutableClass { private final int num; private final HashMap<String, String> hashmap; public ImmutableClass(int num, HashMap<String,String> hashmap) { this.num = num; this.hashmap = new HashMap<String,String>(hashmap); } public int getNum() { return num; } //Collections.unmodifiableMap ⇒ create a copy of original map and make it read-only, if user try to modify it, throw UnSupportedOperationException public Map<String,String> getHashMap() { return Collections.unmodifiableMap(hashmap); } public static void main(String[] args) { HashMap<String, String> originalMap = new HashMap<>(); originalMap.put("key1", "value1"); originalMap.put("key2", "value2"); ImmutableClass immutableObject = new ImmutableClass(42, originalMap); // Trying to modify the originalMap originalMap.put("key3", "value3"); System.out.println(immutableObject.getHashMap()); // Trying to modify the returned hashMap Map<String, String> returnedMap = immutableObject.getHashMap(); returnedMap.put("key4", "value4"); // throw exception }
}

Ok hi vọng bài viết này giúp cho mọi người phần nào có cái nhìn sơ bộ về Immutable class và ứng dụng của nó trong dự án.

Nếu có góp ý gì thì mọi người cứ comment thoải mái mình sẽ cố gắng trả lời nếu có thể.

Nguồn tham khảo:

https://www.geeksforgeeks.org/create-immutable-class-java/

https://www.digitalocean.com/community/tutorials/how-to-create-immutable-class-in-java

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 302

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 278

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 51

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 194

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 71

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 139