Fine-grain refactoring deep dive (4) – Enum.

1. Issue Cho đoạn code sau: public enum DataActionEnum { CREATE(0, "create"), UPDATE(1, "update"), DELETE(2, "delete"); private Integer id; private String name; DataActionEnum(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() {return id;} public void setId(Integer id) {this.id = id;} public String getName() {return name;} public void setName(String name)

1. Issue

Cho đoạn code sau:

public enum DataActionEnum {

	CREATE(0, "create"),
	UPDATE(1, "update"),
	DELETE(2, "delete");

	private Integer id;

	private String name;

	DataActionEnum(Integer id, String name) {
		this.id = id;
		this.name = name;
	}

	public Integer getId() {return id;}

	public void setId(Integer id) {this.id = id;}

	public String getName() {return name;}

	public void setName(String name) {this.name = name;}
}

Thoạt nhìn thì trông có vẻ ổn, nhưng vấn đề ở đây là cách thiết kế này đã làm sai lệch mục đích ban đầu của Enum. Mà khoan đã, Enum là cái gì?

Enum (Enumeration) là 1 dạng class (bạn xem mã bytecode thì sẽ rõ) với tập hợp số lượng nhất định các hằng số (CONSTANT)

Có nghĩa rằng giá trị của Enum sau khi được khởi tạo thì không được phép thay đổi tại runtime.

Solution

Chúng ta sẽ viết lại đoạn code phía trên một cách đơn giản và xịn xò hơn với sự giúp sức của thư viện lombok như sau:

@Getter
@RequiredArgsConstructor
public enum DataActionEnum {

	CREATE(0, "create"),
	UPDATE(1, "update"),
	DELETE(2, "delete");

	private final Integer id;
	private final String name;
}

Enum field không phải là constant vì điều kiện để khai báo một constant trong Java phải đi kèm với keywords static final, tuy nhiên khi khai báo static thì phải initialize giá trị cho nó là điều mà chúng ta sẽ không làm ở đây. Thế nên ở đoạn code phía trên, chúng ta cố gắng tạo nên fake constant bằng việc loại bỏ setter/mutator ra khỏi enum và thêm từ khóa final vào tất cả các field.

Nguồn: viblo.asia

Bài viết liên quan

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s