Tôi có một vài lớp học như thể hiện ở đâycó được khối khởi tạo tĩnh để chạy trong một java mà không cần nạp lớp
public class TrueFalseQuestion implements Question{
static{
QuestionFactory.registerType("TrueFalse", "Question");
}
public TrueFalseQuestion(){}
}
...
public class QuestionFactory {
static final HashMap<String, String > map = new HashMap<String,String>();
public static void registerType(String questionName, String ques) {
map.put(questionName, ques);
}
}
public class FactoryTester {
public static void main(String[] args) {
System.out.println(QuestionFactory.map.size());
// This prints 0. I want it to print 1
}
}
Làm thế nào tôi có thể thay đổi TrueFalseQuestion
lớp để các phương pháp tĩnh luôn luôn chạy để tôi nhận được 1 thay vì 0 khi tôi chạy phương pháp chính của tôi? Tôi không muốn có bất kỳ thay đổi nào trong phương pháp chính.
Tôi đang thực sự cố gắng triển khai các mẫu nhà máy nơi các lớp con đăng ký với nhà máy nhưng tôi đã đơn giản hóa mã cho câu hỏi này.
Để tham khảo, thiết kế này đến để tránh sự cần thiết của nhà máy biết về các lớp câu hỏi (ở đây: http : //stackoverflow.com/questions/2582357/augment-the-factory-pattern-in-java). –
Tôi không thấy câu hỏi đó. Một cái gì đó cần phải biết về việc thực hiện giao diện Câu hỏi, cho dù đó là nhà máy trực tiếp, hoặc thông qua một số loại tập tin cấu hình. Cách khác duy nhất là, như tôi đã nói, đi qua tất cả các lớp trên classpath và xem họ có thực hiện Câu hỏi hay không. Cũng xin lưu ý rằng hãy báo trước về việc có một nhà máy được xây dựng không đầy đủ trong câu trả lời của tôi ở trên. Nó có thể hoạt động ngay bây giờ, nhưng không có sự bảo đảm về trạng thái của đối tượng trong tương lai (hoặc thậm chí trong hiện tại, trên các nền tảng). –