2013-01-01 2 views
4

자바 프로젝트의 모든 패키지에서 모든 클래스를 출력하려고합니다. 예를 들어, 포함 된 프로젝트가자바 프로젝트의 모든 패키지

Package1.Class1 
Package1.Class2 
Package1.Class3 
Package2.Class1 
Package2.Class2 

이 패키지와 클래스를 모두 인쇄하고 싶습니다. 내가 할 수있는 방법에 대한

Package[] pa = Package.getPackages(); 
for (int i = 0; i < pa.length; i++) { 
    Package p = pa[i]; 
    System.out.print("\"" + p.getName() + "\", "); 
} 

어떤 생각을 : 다음 코드를 사용하여, 나는 그들을 나열 할 수 있어요,하지만 난 여기에 Package.Class c = new Package.Class();

의 방식으로 참조하는 경우에만 내가 사용하려고 코드입니다 이?

감사합니다 모두

+1

* * 필요할 때? 런타임시 또는 패키징 전에 (컴파일시에)? – Raffaele

+2

가 중복 되었습니까? http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection – Kent

답변

3

클래스 로더의 동적 인 특성으로 인해 쉬운 방법은 없습니다.

당신이 반사 도서관에서 볼 수 있었다 그러나 : http://code.google.com/p/reflections/

현재 클래스 경로의 클래스를 조회 할 수 있습니다. 패키지를, 개별 폴더 및/또는 jar 파일로 분할 그들 각각을 걷고 목록, 클래스 경로 reflections

Reflections reflects = new Reflections("my.project.prefix"); 

Set<Class<? extends Object>> allClasses = 
reflects.getSubTypesOf(Object.class); 
2

이동하거나, 구문 분석 : 해당 라이브러리와

이 뭔가를 시도 할 수 있습니다. 그러나 그것은 반사 라이브러리를 사용하는 것보다 훨씬 복잡합니다.

+0

FS 방식으로 걷는 +1. 방금 게시물을 동일하게하고 싶었습니다. – Kent

+0

@Kent 저는 반사 라이브러리를 직접 사용 하겠지만 대안이 있다는 것을 분명히하고 싶었습니다. Spring의 클래스 패스 스캐닝 기술도 염두에두고있다. –

관련 문제