Bạn có thể tạo nó trong một hàm tĩnh, miễn là bạn bắt được Ngoại lệ nó (có khả năng) tăng lên.
public class MyClass {
protected static final Setter setter = createSetter();
protected static Setter createSetter() {
try {
return new Setter();
} catch(FileNotFoundException e) {
// handle it appropriately
return null;
}
}
}
Không có cách nào để cho phép ngoại lệ lan truyền, vì nó làm tăng ngoại lệ đã kiểm tra (và điều đó bất hợp pháp trong quá trình khởi tạo). Có một vài cách để đối phó với điều đó:
Raise một ngoại lệ được kiểm soát: Điều này gây ra một java.lang.ExceptionInInitializerError
để có được nâng lên khi nó cố gắng để tải lớp. Nó có thể gây nhầm lẫn và khó theo dõi và gỡ lỗi. Tôi không khuyên bạn nên.
Thay đổi thành biến không phải cuối cùng và tạo một chức năng để truy cập nó: Nếu biến không cuối cùng, bạn có thể kiểm tra xem nó có được đặt hay không và tăng ngoại lệ đã kiểm tra nếu không. Điều này cho phép (trên thực tế, đòi hỏi) mã của bạn để xử lý các ngoại lệ tại điểm mà nó được gọi là:
public class MyClass {
private static Setter setter;
protected static synchronized Setter getSetter() raises FileNotFoundException {
if setter == null {
setter = new Setter();
}
return setter;
}
}
Nguồn
2010-07-14 14:24:58
Nói chung nếu có điều gì ném một ngoại lệ kiểm tra, nó không phải là một cái gì đó mà bạn muốn lưu trữ trong một tĩnh. –