2014-12-07 2 views
0

프로젝트의 모듈 로더를 작성하기 위해 Java의 반사 작업을 시도하고 있지만 getMethod() 메소드는 메소드가 명확한 경우에도 존재하는 메소드를 찾지 못하는 것 같습니다. 한정된. Module.class 파일에서 Java getMethod() 메소드를 찾을 수 없습니다.

는 : public final void load(org.clustermc.core.ClusterCore plugin);

나는 그것이 클래스 내에서 발견 된 방법을 인쇄 할 핵심 요구했다. 결과 :
Methods: [public void me.capit.clustersample.SampleModule.onLoad(), public void me.capit.clusterSample.SampleModule.onUnload(), public final void org.clustermc.core.Module.load(org.clustermc.core.ClusterCore), /*Other stuff from Object*/];
SampleModule은 Module을 확장합니다. 핵심에서

이상 :

Method enable = c.getMethod("onLoad"); Method init = c.getMethod("load", org.clustermc.core.ClusterCore.class);가에 onLoad에 대한 변수를 '수'는() 잘 작동하지만은 (ClusterCore.class를) 부하를 찾으려고 노력에, 나는 경우는, NoSuchMethodException를 얻을. 왜...?

+0

- :

Method init = c.getDeclaredMethod("load", org.clustermc.core.ClusterCore.class); 

호출하기 전에이 줄을 실행해야합니다. 그렇지 않으면'ClusterCore.class'가'ClusterCore' 매개 변수 유형과 다른 런타임 클래스를 참조한다는 문제점을 겪을 수 있습니다. – Holger

답변

0

로드 방법의 범위를 확인하십시오. 비공개 인 경우 액세스되지 않습니다. 당신은 사실대로 설정할 필요가 있습니다. getMethod 대신 getDeclaredMethod에 주목하십시오. 여러`ClassLoader`s로 작업하는 경우 서로 다른 로더를 통해 클래스를 여러 번로드되지 않습니다 확인,

init.setAccessible(true); 
관련 문제