2012-02-14 5 views
2

Jasmin 코드로 컴파일하여 Java Bytecode 컴파일러로 작성하고 어셈블하는 중입니다. 나는 소스 코드 파일이 자바 라이브러리 클래스를 참조하고 사용할 수 있다는 의도로이를 만들었습니다. (당신은 String, 인쇄 등을 위해 꽤 많이 가지고 있습니다). 내 문제는이 일을 정확히 수행하는 방법입니다.Java에서 Java로 바이트 코드 컴파일러 : Java 클래스 라이브러리 정보를 얻으려면 어떻게해야합니까?

지금까지 Java 설치 폴더의 텍스트 파일에 보관 된 모든 라이브러리 클래스 목록에 대한 참조를 사용했습니다 (패키지 및 이름 만 나열 함). 비록 라이브러리 클래스가 사용되었을 때 타입 검사기가 어떤 타입 검사도 할 수 없었기 때문에 파서/타입 검사기를 코딩하는데 이것을 사용했다.

라이브러리 클래스의 메서드를 호출하려는 경우 전체 메서드 서명을 제공해야하므로 코드 생성 작업을 수행하는 것이 실제로 문제가됩니다. 액세스 할 수없는 무언가입니다.

저는 진행 방법에 대한 사람들의 조언을 배회했습니다. 한 가지 방법은 모든 클래스를 거쳐 모든 매개 변수와 반환 유형의 데이터베이스/목록을 만드는 것입니다. 이것은 극도로 시간 소모적이며 아마도 너무 비현실적입니다. 가능한 다른 우아한 접근법이 있습니까?

감사합니다, 윌

P.S. 나는 이것을 코딩하기 위해 파이썬을 사용하고있다. 솔루션에서 Java 코드를 사용해야한다면 하위 프로세스로 실행할 수 있다고 가정합니다.

답변

0

이 부분을 자세히 살펴보면 Java Reflection을 사용하면 가능할 것으로 보입니다. 내가 얼마나 성공적 이었는지 알려주는이 게시물에 답장을 보낼 것입니다.

+0

예, 결국이 옵션을 사용했습니다. 필자는 메서드/필드 등의 이름을 가진 작은 자바 프로그램을 작성하고 클래스가 속한 클래스를 반환합니다 (존재하는 경우). 가능한 모든 Java Refletion API를 사용할 수 있습니다. –

0

이미 자바에서 바이트 코드로 컴파일러가 있습니다. 그리고 JVM 파이썬. 실제 목표는 무엇입니까?

메소드/리턴 유형의 콜렉션을 작성하는 것이 "매우 시간 소모적"이라고 생각하십니까? 시간이 많이 걸리는 것은 "극도로"입니까? 그것은 실생활에서 어떻게 작동하는지에 대한 것이고, 심지어 javap을 사용하는 경우에도 클래스 파일에서 정보를 가져 오는 데 시간이 많이 걸리지는 않습니다. 그 외에도 .class 파일에서 직접 정보를 가져 오는 ASM, BCEL 및 기타 라이브러리가 있지만 javap은 간단한 텍스트 출력을 제공하며 사용자의 요구에 적합 할 수 있습니다.

기호를 사용하려면 기호 표가 필요합니다. 사용할 수있는 것을 확보하는 유일한 방법은 사용 가능한 것을 저장하는 것입니다. 그것은 당신이 생각하는 것보다 빠르고, 작고, 특히 속기 표기법을 사용한다면 더욱 그렇습니다.

+0

나의 궁극적 인 목표는 자바 언어의 서브 세트에 몇 가지 추가 기능을 추가하는 것이다. 다음 모든 메서드 목록을 만들 수 있다고 가정합니다. 이제는 필수 라이브러리 패키지의 수업 만 포함 할 수 있습니다. –