Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để tạo một biến chỉ có thể được đặt một lần nhưng không phải là biến cuối cùng trong Java?

Khi bạn khởi tạo một biến cuối cùng, bạn không thể sửa đổi thêm giá trị của nó. tức là bạn chỉ có thể gán giá trị cho biến cuối cùng một lần. Nếu bạn cố gắng gán giá trị cho một biến cuối cùng, lỗi thời gian biên dịch sẽ được tạo ra.

Ví dụ

public class FinalExample {
   final int j = 100;
   public static void main(String args[]){
      FinalExample obj = new FinalExample();
      obj.j = 500;
      System.out.println(obj.j);
   }
}

Lỗi thời gian biên dịch

FinalExample.java:6: error: cannot assign a value to final variable j
   obj.j = 500;
      ^
1 error

Đạt được chức năng "cuối cùng"

Để đạt được chức năng cuối cùng mà không thực sự sử dụng từ khóa cuối cùng -

Đặt biến ở chế độ riêng tư và đặt giá trị cho nó bằng cách sử dụng phương thức setter để nếu bạn cố gọi nó lần thứ hai, nó sẽ đặt giá trị trước đó hoặc ném một ngoại lệ.

Ví dụ

public class FinalExample {
   private Integer num;
   public void setNum(int num){
      this.num = this.num == null ? num : this.num;
   }
   private String data;
   public void setData(String data) {
      this.data = this.data == null ? data : demo();
   }
   public String demo() {
      String msg = "You cannot set value to the variable data for the second time";
      throw new RuntimeException(msg);
   }
   public static void main(String args[]){
      FinalExample obj = new FinalExample();
      obj.setNum(200);
      System.out.println(obj.num);
      obj.setNum(500);
      System.out.println(obj.num);
      obj.setData("hello");
      obj.setData("sample data");
   }
}

Đầu ra

200
200
Exception in thread "main" java.lang.RuntimeException: You cannot set value to the variable data for the second time
at SEPTEMBER.remaining.FinalExample.demo(FinalExample.java:15)
at SEPTEMBER.remaining.FinalExample.setData(FinalExample.java:12)
at SEPTEMBER.remaining.FinalExample.main(FinalExample.java:26)