Tôi đang sử dụng gói reflections để có được một tập hợp các lớp triển khai một giao diện nhất định. Bộ này sẽ được sử dụng như một danh sách các tùy chọn dòng lệnh có thể. Vấn đề của tôi là tôi chỉ muốn có được lớp instantiable, nhưng ngay bây giờ có được cả hai lớp instantiable và không instantiable (ví dụ như các lớp trừu tượng) từ đoạn mã sau:Làm thế nào để tôi chỉ nhận được các lớp học có thể diễn đạt với các phản xạ
Map<String, Class<? extends InterfaceOptimizer>> optimizerList = new HashMap<String, Class<? extends InterfaceOptimizer>>();
Reflections reflections = new Reflections("eva2.optimization.strategies");
Set<Class<? extends InterfaceOptimizer>> optimizers = reflections.getSubTypesOf(InterfaceOptimizer.class);
for(Class<? extends InterfaceOptimizer> optimizer : optimizers) {
optimizerList.put(optimizer.getName(), optimizer);
}
Có cách nào để lọc các thiết lập được trả về bởi getSubTypesOf
để lọc ra các lớp trừu tượng?
Xem http://stackoverflow.com/questions/1072890/how-can-i-determine-whether-a-java-class-is-abstract-by-reflection – rusmus
@rusmus, tôi đặc biệt yêu cầu không thể nhanh chóng các lớp và các lớp trừu tượng chỉ là một ví dụ về điều đó. Cấp, câu hỏi bạn liên kết bao gồm các lớp trừu tượng khá tốt, nhưng tôi không biết cách kiểm tra các giao diện. – halfdan