2011-11-10 5 views
2

리플렉션을 사용하여 클래스 주석을 가져 오는 것이 가능합니까 (깔끔한 방법입니까)? .java 파일을 읽고 주석을 얻을 수는 있지만 가능하지 않을 수도 있습니다. 따라서/**의 첫 번째 인스턴스를 찾으면 */내가 메소드 주석으로 끝날 수 있습니다.프로그래밍 방식으로 클래스 주석을 얻을 수 있습니까

코드 해독책을 피할 수 있습니까? 제가 스스로이를 해결하고 싶습니다.

+0

정확한 목표는 무엇입니까? 주석은 생성 된 코드의 일부가 아니므로 런타임에는 사용할 수 없습니다. Javadoc 도크 렛이 어떤 식 으로든 당신을 도울 수 있는지보기를 원할 수 있습니다. –

답변

6

댓글이 클래스 파일에 보관되지 않으므로 댓글을 얻기 위해 원래 소스로 돌아 가야합니다.

런타임에 필요한 정보가 있으면 주석에 저장해야합니다. 런타임에 액세스 할 수 있습니다.

+2

참조 http://download.oracle.com/javase/tutorial/java/javaOO/annotations.html 및 주석을 사용하는 소프트웨어의 예는 http://static.springsource.org/spring/docs/2.5.6/을 참조하십시오. reference/metadata.html – VolkerK

2

불가능합니다. 주석은 컴파일 된 코드에서 제거됩니다.

+1

다른 식으로 말하면 컴파일러는 주석을 무시합니다. –

+0

.java 파일에 액세스 할 수있는 경우 – Biscuit128

+0

@PeterLawrey 주석 처리 중에 액세스 할 수 있기 때문에 컴파일러에서 실제로 무시한다고 생각하지 않지만 실제로는 실제 코드를 출력하는 데 사용되지 않습니다. –

2

내가 아는 한, 리플렉션을 통해이를 수행 할 방법이 없습니다. 주석/JavaDoc 컴파일 후 실제 클래스 파일에 이월됩니다 의심 스럽다. 이를 수행하는 한 가지 방법은 주석 처리기를 사용하는 것입니다. 주석 처리는 리플렉션을 사용하지 않고 소스 모델/미러의 컴파일 시간에 해당합니다. 클래스 선언이나 메소드와 같은 프로그램 요소에 대한 문서를 얻을 수 있습니다. 런타임시 사용할 수 있도록이 파일을 메타 데이터 파일로 가져올 수 있습니다.

2

컴파일러가 주석을 잘라 내기 때문에 리플렉션을 통해 주석을 얻을 수 없다고 생각합니다. 따라서 .class에 없습니다. 예를 들어, Eclipse는 소스가 놓인 위치를 알려주는 경우에만 javadoc 도움말을 제공합니다.

2

정말하고 싶다면 소스 파일을 구문 분석하고 주석을 추출하는 (외부) 응용 프로그램을 작성할 수 있습니다. 그런 다음 regex을 사용하여 관심있는 댓글 (예 : 'class'키워드 바로 위에있는 것) 또는 원하는 것만 취할 수 있습니다.

하지만 내가 묻는 것을 꺼리는 이유는 무엇입니까? 그 정보에 실제로 액세스해야하는 경우 주석이 아닌 다른 것으로 홍보해야한다는 의미입니다. 응용 프로그램의 어딘가에있는 문자열 상수 나 클래스/메서드에 대한 주석과 같이 그대로 유지됩니다. 컴파일러에 의해 정상적인 방법을 사용하여 액세스 할 수 있습니다. 소스 된 .java 파일에서 읽는 이미 다른 사람에 의해 언급 한 것을 제외

0

, 하지 반영이다. 반사가 컴파일 된 코드, class 파일에서 작동합니다.

+0

자바 소스를 읽는 것이 정상적인 파일 처리 일뿐입니다. – Guillaume

관련 문제