Nếu đó là riêng tư và bạn không muốn nó được gọi là trong phạm vi lớp học riêng của mình, có một cách dễ dàng để ngăn chặn một điều như vậy: Đừng viết mã gọi nó nhiều hơn một lần. Bạn là tác giả của lớp. Tại sao bạn viết mã để ngăn cản bản thân làm điều gì đó nằm trong tầm kiểm soát của bạn?
Không thể gọi bên ngoài lớp học mà không cần phải phản ánh. Nếu bạn không muốn nó được gọi là nhiều hơn một lần trong lớp học, sau đó chỉ cần không làm điều đó. Tại sao viết mã để ngăn chặn một hành động mà bạn có thể chọn không làm?
Hãy xem xét lại:
Chúng ta có thể resrict việc tạo ra các đối tượng của một lớp bằng cách làm cho constructor của tư nhân.
Constructor là riêng tư, vì vậy không thể gọi bên ngoài lớp trừ khi khách hàng sử dụng API phản chiếu để làm suy yếu các hạn chế truy cập.
Nhưng hàm tạo này vẫn có thể là được gọi từ trong vòng lớp. Có bất kỳ nào để ngăn chặn điều này trong Java không?
OP yêu cầu ngăn chặn gọi hàm tạo bị hạn chế bên trong lớp học.
Nếu hai câu lệnh này là chính xác, vui lòng giải thích lý do tại sao cần phải ngăn chặn logic cuộc gọi đến hàm tạo.
Dưới đây là một sử dụng điển hình của một nhà xây dựng tư nhân:
public class Singleton
{
private static final Singleton instance = new Singleton();
public static void main(String[] args)
{
Singleton singleton = Singleton.getInstance();
System.out.println(singleton);
}
private Singleton() {};
public static Singleton getInstance() { return Singleton.instance; }
public String toString() { return Singleton.class.getName(); }
}
Tôi không thể nhìn thấy điểm của không cho phép các cuộc gọi đến các nhà xây dựng tư nhân.
Bạn có thể sử dụng Aspectj để đảm bảo điều đó. Tuy nhiên, nó chỉ nên làm như vậy trừ khi bạn sẽ muốn điều này trên nhiều hơn một nơi, vì nó sẽ thêm một sự phụ thuộc rất lớn và phức tạp. Thường xuyên hơn không, tiêu chuẩn và thực hành sẽ phục vụ bạn tốt hơn về trường hợp này thay vì công cụ và kiểm soát. –
Chúng tôi ném một UnsupportedOperationException từ các nhà xây dựng riêng của chúng tôi mà không có nghĩa là để được khởi tạo. Trên thực tế, thành ngữ đó rất phổ biến đối với chúng ta khi các IDE của chúng ta được cấu hình để chúng ta gõ * pct * (bốn phím bấm) và nó tạo ra một hàm tạo riêng ném một UnsupportedOperationException. –
SyntaxT3rr0r