1

외부 클래스 파일의 반영에 기반한 일부 작업을 수행하는 명령 줄 유틸리티를 만들고 싶습니다. .class 파일이나 소스 파일 (아마도 와일드 카드) 경로를 전달합니다. 실행 중 어떤 시점에서 각 클래스에 대한 Class 객체를 가져와야하며 미리 패키지 이름을 알 필요가 없습니다. 이것을하기 위해 무엇이 필요할까요? 시작하려면 무엇을 볼 수 있습니까? 또한 클래스의 소스 파일에 액세스 할 수 있습니다.파일 시스템에서 임의의 java .class 파일을로드하고 반영하는 방법은 무엇입니까?

이것은 자바 1.6에 있습니다.

또한 자바 컴파일러 API를 사용하여 클래스 객체를 소스에서 쉽게 가져올 수 있습니까?

답변

3

ClassLoader을 만들고 defineClass을 사용하여 읽은 파일에서 Class을 만들어야합니다. Add dynamic Java code to your application은 그런 것들에 대해 읽는 것이 흥미 롭습니다. 소스의 편집을 설명하기도합니다.

+0

'create'는 인스턴스화 또는 하위 클래스를 의미합니까? – gtrak

+0

'defineClass'는 클래스 파일을 JVM에로드하고 그것을 나타내는 Class를 리턴합니다. 그런 다음 리플렉션 API를 사용하여 클래스의 인스턴스를 만들 수 있습니다. – ewernli

+0

기존 클래스 로더를 사용해야하는 경우 리플렉션을 사용하여 선택한 클래스 로더에서 defineClass()를 호출 할 수 있습니다. –

1

패키지의 이름을 모르는 경우 ObjectWeb의 ASM과 같은 적절한 라이브러리로 파일을 읽으면 알 수 있습니다. 실제로 클래스 파일에 대한 정보를 찾으려는 경우 리플렉션을 전혀 사용하지 않을 수도 있습니다.