2017-10-21 1 views
1

JAR에서 메소드를 실행하려면 메소드는 public static SomeType getValue()처럼 보일 것입니다. JAR 파일의 클래스에서 값 가져 오기

나는 반사를 사용하려하고 괜찮아 보였다 : 그것을

targetType value = targetClass.cast(getValueMethod.invoke(null)); 

value의 유형 targetType 수 없습니다되지 않습니다

URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}, Main.class.getClassLoader()); 
Class targetClass = classLoader.loadClass("some.package.TargetClass"); 
Class targetType = classLoader.loadClass("some.package.SomeType"); 
Method getValueMethod = targetClass.getMethod("getValue"); 

그러나 잠시

이 같은 반환 값을 얻기? 그러나 내가 제대로 getValue()의 가치를 얻을 및 데이터에 액세스 할 수있는 방법, 유형 SomeType는 JAR 파일에, 그래서, SomeType value = ~~ 다음

처럼 할 수 없어?

+0

리플렉션도 사용합니다. 그런데 왜 그걸하고 있니? 클래스 패스에 항아리 파일이없는 이유는 무엇입니까? 더 높은 수준에서 달성하려는 것은 무엇입니까? –

+0

'jarFile'을 동적으로 변경할 수 있기 때문에. 하지만 classpath를 설정하는 것은 정적 인 방법입니다. – QueN

답변

0

인터페이스를 사용하여 반환 값을 제한하십시오.

반환 값에 제한이 없다면, 그것에 대해 알고 있다는 것을 의미합니다. 그렇다면 '동적로드'의 의미는 무엇입니까? 정상적인 인터페이스 SomeInterface 다음

SomeInterface value = targetClass.cast(getValueMethod.invoke(null)); 

다른 코드는 SomeInterface 작동하지만 실제 무엇을 알 필요가 없습니다

개요입니다. 그것은 인터페이스의 힘입니다.

관련 문제