2015-01-12 4 views
0

사용자 정의 ClassLoader를 작성했으며 클래스를로드하려고합니다. 나는 항아리에서 클래스를로드 할 순간에이 코드를 사용하고 있습니다 :String을 사용하지 않고 사용자 정의 ClassLoader로 클래스로드하기

ByteArrayInputStream byteIS = new ByteArrayInputStream(data); 
    JarInputStream jarIS = new JarInputStream(byteIS); 
    JarEntry je; 
    je = jarIS.getNextJarEntry(); 
    byte[] classbytes = new byte[(int) je.getSize()]; 
    jarIS.read(classbytes, 0, classbytes.length); 
    jarIS.close(); 
    CustomClassLoader classLoader = new CustomClassLoader(); 
    classLoader.setClassContent(classbytes); 
    Class c = classLoader.findClass("Main"); 
    Object object = c.newInstance(); 
    Method[] methods = object.getClass().getMethods(); 
    Object returnValue = methods[0].invoke(null, new Object[]{new String[]{}}); 

을이 샘플에서는 분명 내가 클래스 홈페이지를로드하려고 볼 수 있습니다 위. 이제 내 친구가 항아리도 만들었다 고 상상해보십시오. 수업의 이름이 무엇인지 미리 알 수 없습니다. String을 인수로 사용하지 않으려면 어떻게해야합니까?

+0

왜 문자열을 사용하지 않으시겠습니까? –

+0

콘텐츠를 변경하고 싶습니다. 클래스 이름이 항상 같지는 않습니다. – ManyQuestions

+0

어? 그렇다면 수업을 어떻게 식별 하시겠습니까? –

답변

0

ServiceLoader API을 살펴볼 수 있습니다. 을 알지 못하는 서비스 구현 (클래스)에 대한 공통 인터페이스를 정의 할 수 있습니다..

관련 문제