1
솔직히 말해서 가능하거나 불가능하다는 것을 알지 못합니다. 하지만 내가하려는 것은 아래와 같습니다.Java에서 .class 파일의 인스턴스를 얻을 수있는 방법
- 터미널의 javac 명령을 통해 ClassFile.java에서 클래스 파일을 만들었습니다.
- 그런 다음 .java 파일 또는 .class 파일에서 인스턴스를 가져 오려고합니다.
- 다음으로 이클립스에서 다른 프로젝트를 만들었습니다.이 프로젝트 경로와 상위 파일 경로가 완전히 다른 것 같아요. 예를 들어, ClassFile.java/class 파일은 '~/Downloads'폴더에 위치 할 수 있고, 다른 한편으로는 새로운 eclipse 프로젝트가 '~/workspace /'에있을 수 있습니다.
- 그래서 FileInputStream에서 1 단계에서 참조한 파일을 읽습니다.
여기에서 코드를 붙여 넣습니다.
공용 클래스 홈페이지 {
private static final String CLASS_FILE_PATH = "/Users/juneyoungoh/Downloads/ClassFile.class"; private static final String JAVA_FILE_PATH = "/Users/juneyoungoh/Downloads/ClassFile.java"; private static Class getClassFromFile(File classFile) throws Exception { System.out.println("get class from file : [" + classFile.getCanonicalPath() + " ]"); Object primativeClz = new Object(); ObjectInputStream ois = null; ois = new ObjectInputStream(new FileInputStream(classFile)); primativeClz = ois.readObject(); ois.close(); return primativeClz.getClass(); } public static void main(String[] args) throws Exception { getClassInfo(getClassFromFile(new File(CLASS_FILE_PATH))); }
} 당신의 가정 같은
,이 코드는 오류가 있습니다. 예를 들어, 그것은 보여줍니다
java.io.StreamCurruptedException: invalid stream header : CAFEBABE
이가 된 .class 파일이나 된 .java 파일에서 객체 인스턴스 얻을 수있는 방법?
P. 추가 라이브러리를 사용하지 않기를 바랍니다.
코드에서 언급 한 파일 이름이 유감 스럽지만 'HelloWorld.class'가 아니라 'ClassFile.class'입니다. 나는 단지 설명하려고 노력했다; –
가능한 [폴더 또는 JAR에서 런타임에 클래스를로드하는 방법] (http://stackoverflow.com/questions/11016092/how-to-load-classes-at-runtime-from-a-folder-or) -jar) –
나는 똑같은 방식 일 수 있지만 약간 다를 수 있다고 생각합니다. 어쨌든, 고마워요 : D –