Nếu bạn là người mới bắt đầu học lập trình Java và làm quen với khái niệm lập trình hướng đối tượng. Thì có lẽ một câu hỏi lớn được đa số người học đặt ra rằng “Dùng getter setter làm gì thế nhỉ?” trong khi chúng ta có thể khai báo public rồi dùng trực tiếp cho nó tiện phải không nào?
Câu trả lời đơn giản cho câu hỏi này đó là “Để bảo vệ dữ liệu của bạn”.
Với mỗi instance của một class, getter được dùng để lấy giá trị của một thuộc tính cụ thể trong khi setter được dùng để cập nhật giá trị cho các thuộc tính.
public class Vehicle { private String color; // Getter public String getColor() { return color; } // Setter public void setColor(String c) { this.color = c; } }
Chúng ta có thể thao tác đơn giản trên Vehicle class như sau
public static void main(String[] args) { Vehicle v1 = new Vehicle(); v1.setColor("Red"); System.out.println(v1.getColor()); } // Outputs "Red"
Chúng ta có thể dùng getter, setter để kiểm tra tính hợp lệ của dữ liệu trước khi được cập nhật hoặc trả về. Ví dụ như mình có một thuộc tính number chỉ nhận giá trị trong khoảng từ 1 đến 10, ngoài những giá trị này là không hợp lệ. Do đó trong hàm setNumber mình đã thực hiện việc kiếm tra
public void setNumber(int number) { if (number < 1 || number > 10) { throw new IllegalArgumentException(); } this.number = num; }
Giả sử chúng ta không dùng hàm setNumber mà đặt biến number là public thì bên ngoài có thể cập nhật giá trị mà không tuân thủ theo logic đã đặt ra ban đầu cho number
obj.number = 13;
Như vậy thuộc tính number của chúng ta giờ đây đã là private nên bắt buộc chúng ta phải cung cấp một hàm getter để cho phép bên ngoài lấy giá trị number từ instance ra.
public int getNumber() { return this.number; }
Nguồn