2016-07-11 2 views
0

JFileChooser를 사용하여 클래스 파일 (예 : Foo.class)을 가져 와서 File 클래스 객체에 저장했습니다 (예 : File a). 이제 리플렉션 API를 사용하여 Foo.class의 메소드 및 변수와 같은 메타 데이터를 읽어야합니다. 제 질문은 a에 저장했습니다. 바로 File reference variable입니다. 그렇다면 어떻게 파일에 API를 사용할 수 있습니까? 또는 그렇게하기위한 다른 제안도 환영합니다.File 클래스의 인스턴스를 만드는 방법은 무엇입니까?

답변

1

내가 이해, 우선 당신은 당신이 URLClassLoader를 통해 당신이 파일의 클래스 파일 및 문자열 클래스 이름 (또한 파일 이름과 정확히 같은 클래스 이름을 알아낼 수)

있다고 가정하자 것을 할 수있는 클래스 개체에 클래스 파일을 변환해야
try { 
    URLClassLoader classLoader = new URLClassLoader(new URL[]{parent_directory}); 
    Class<?> clazz = classLoader.loadClass(className); 
} catch (Exception e) { 
    // something went wrong.. 
    e.printStackTrace(); 
} 

는 이제 클래스 객체가 있고 당신은 식별 할 수있는 방법을 만들 필요가 메소드 이름을 알 수없는 클래스 개체를

try { 
    Object instance = clazz.newInstance(); // if there no default constructor you need to get constructors list and create a object 
    Method method = clazz.getDeclaredMethod(methodName, String.class); 
    method.setAccessible(true); 
    method.invoke(instance, argument); 
} catch (Exception e) { 
    // something went wrong.. 
    e.printStackTrace(); 
} 

주를 만들 반사를 사용할 수 있습니다.

+1

'URLClassLoader'에 전달하는 'URL'은 클래스 파일이 아닌 기본 디렉토리를 나타내야합니다. 따라서 선택한 클래스의 패키지에 따라 클래스의 상위 디렉토리 또는 상위 클래스 중 하나를 사용해야합니다. – Holger

+0

네 답은 사실에 따라 답변이 –

+0

예. 그렇지만 loadClass 메소드는 클래스의 바이너리 이름을 인수로 취하고 파일 클래스 객체에서 해당 클래스의 절대 경로 만 갖고 있습니다. 그것에 대한 해결책이 있습니까? @mithatkonuk – Shubham

관련 문제