Bạn sẽ phải sử dụng thực hành mã ở trên khi bạn đang xử lý xác thực giá trị sent
(mà bạn đang gửi).
Ví dụ, nếu bạn không muốn cho phép bất kỳ số âm nào được đặt làm studentNUmber
từ hàm tạo thì bạn phải viết một logic để kiểm tra số bên trong hàm tạo hoặc phương thức bên trong tùy thuộc vào lớp đó là bất biến hay có thể thay đổi. Nếu class là mutable thì viết logic bên trong method và nếu class là bất biến thì viết logic bên trong constructor (trong phương thức setter viết không thay đổi được không được phép vì method setter có thể thay đổi trạng thái của đối tượng).
Nếu bạn không áp dụng logic như vậy thì bất kỳ giá trị âm nào cũng có thể được đặt thành studentNumber
.
Ngoài ra, phương pháp setter là hữu ích khi bạn có một đối tượng được tạo ra trong một số lớp khác và sau đó bạn muốn thay đổi nó là nhà nước, chẳng hạn, bạn muốn cập nhật tên của sinh viên, như ví dụ đưa ra dưới đây,
public class Student {
private String studentNumber;
private String studentName;
private double studentResult;
// The standard getter and setter method are define here.
public Student(String aNumber, String aName) {
studentNumber = aNumber;
studentName =aName;
}
public String getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public double getStudentResult() {
return studentResult;
}
public void setStudentResult(double studentResult) {
this.studentResult = studentResult;
}
@Override
public String toString() {
return "studentNumber:"+studentNumber+", studentName"+studentName+", studentResult"+studentResult;
}
}
class Test {
public static void main(String[] args) {
Student s = new Student("1", "AAA");
s.setStudentName("BBB"); //we should call this method because of "studentName" is private variable in Student class.
System.out.println(s);
}
}
về setStudentResult
, bạn không cần phải có một biến mẫu khác vì nó đã được khai báo trong lớp Student
. Thay vào đó, bạn cần thêm một tham số khác trong hàm tạo vào giá trị setStudentResult
.
public Student(String aNumber, String aName, long result) {
studentNumber = aNumber;
studentName =aName;
studentResult =result;
}
Tại sao bạn cần một biến mẫu khác? Dường như bạn có ba bộ định cư và ba biến mẫu ... mặc dù thực tế là một số * được lưu trữ trong một chuỗi là một chút đáng lo ngại. –
@Jon Skeet - Một số sinh viên có lẽ không thực sự là một con số. Giống như một số điện thoại không phải là. –
@DonRoby: Số điện thoại không phải là ... nhưng số lượng sinh viên có lẽ nên theo kinh nghiệm của tôi. Hoặc nó phải được gọi là ID sinh viên. –