Tôi chỉ đang học java và tôi gặp một số vấn đề. Ở đây chúng tôi có mẫu nhà máy đơn giản:Đăng ký nhà máy tự động
public class SomeFactory {
...
public static void registerProduct(String name, Class<? extends IProduct > f)
}
public SomeProduct implements IProduct {
static {
SomeFactory.register("some product", SomeProduct.class);
}
...
}
Tất cả các sản phẩm phải đăng ký tại nhà máy.
Nhưng trước khi sử dụng mã này, tất cả các lớp Sản phẩm phải được tải. Tôi có thể đặt Class.forName()
ở đâu đó, ví dụ như trong chức năng chính. Nhưng tôi muốn tránh các loại tải thủ công như vậy. Tôi chỉ muốn thêm mới IProduct
triển khai mà không cập nhật các phần khác (chẳng hạn như SomeFactory
hoặc Main
phương pháp, v.v.). Nhưng tôi tự hỏi, liệu có thể tự động tải một số lớp (được đánh dấu bằng chú thích chẳng hạn)?
P.S Tôi muốn thông báo rằng không có lớp nào khác sẽ được thêm vào lúc chạy, tất cả các triển khai IProduct
đều được biết trước khi biên dịch.
UPD # 1 Cảm ơn bạn đã trả lời! Nhưng có thể tạo tệp thuộc tính được tạo tự động với IProduct
trường hợp không? Tôi có nghĩa là nó có thể làm cho một số kịch bản xây dựng-thời gian (cho maven ví dụ) mà tạo ra tập tin tài sản hoặc mã loader? Có các giải pháp hoặc khung như vậy không?
UPD # 2 tôi hoàn thành với việc sử dụng Reflections library cung cấp thông tin thời gian chạy, bằng cách quét classpath lúc khởi động.
thế nào là 'this.getClass() 'sẽ làm việc trong' tĩnh {} '... O_O? –