2013-01-14 20 views
7

Tôi đang sử dụng gói Google Reflections để xây dựng chỉ mục của tất cả các lớp có sẵn để gọi. Các mã sau đây được cho là trả lại tất cả các lớp học mà được nạp trong JVM:Sử dụng Google Reflections để xem danh sách tất cả các lớp - nhưng java. * Có vẻ thiếu

List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>(); 
classLoadersList.add(ClasspathHelper.contextClassLoader()); 
classLoadersList.add(ClasspathHelper.staticClassLoader());      
Reflections reflections = new Reflections(new ConfigurationBuilder() 
     .setScanners(new SubTypesScanner(false), new ResourcesScanner()) 
     .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))); 
Set<Class<? extends Object>> allClasses = 
     reflections.getSubTypesOf(Object.class); 

tôi lưu ý rằng các thiết lập nó trả không chứa bất cứ điều gì trong java * miền.. Ai đó có thể quen thuộc với gói Reflections tư vấn cho tôi về cách để có được những điều này là tốt? Cảm ơn!

Trả lời

2

Không phải tất cả các lớp đều được tải bởi trình nạp lớp thông thường; một số được nạp bởi trình nạp lớp bootstrap để tăng tốc độ mọi thứ, và điều này có thể được mã hóa nguyên bản (và do đó không thể truy cập từ mã Java). Thấy thông báo này:

http://lists.jboss.org/pipermail/jboss-development/2008-April/011943.html

thấy câu hỏi này cho lựa chọn thay thế

Java - Get a list of all Classes loaded in the JVM

7

Google Reflections có thể được sử dụng để nhận được tất cả các lớp học, trong đó có java *, mặc dù nó không phải chủ yếu của nó sử dụng..

Reflections reflections = new Reflections(
    ClasspathHelper.forClass(Object.class), 
    new SubTypesScanner(false)); 

Và hơn:

Set<String> allClasses = 
    reflections.getStore().getSubTypesOf(Object.class.getName()); 
+0

xem chi tiết [ở đây] (http://stackoverflow.com/a/15313028/1424321) – zapp

+0

Cảm ơn rất nhiều! Tôi đang tìm kiếm điều này trong 2 ngày. –

Các vấn đề liên quan