В моем проекте есть несколько ClassLoaders
.
Классы аргументов метода одинаковы, но ClassLoaders
(или экземпляры ClassLoaders), которые загружают эти классы, различны.
Например, ClassA
имеет метод methodA
с аргументом argumentA
, набранный com.example.A
, загруженный загрузчиком классов ClassLoaderA
.
Однако в вашем Java CLASSPATH у вас есть com.example.A
загружается загрузчиком классов ClassLoaderB
.Когда вы вызываете ClassA.class.getDeclaredMethod("methodA", new Class[] { A.class });
, он все равно не сможет найти метод. Поскольку com.example.A
, загруженный ClassLoaderA
, не совпадает с com.example.A
, загруженным ClassLoaderB
.
Может использоваться модель родительского делегирования / шаблон синглтона для пользовательских загрузчиков классов.чтобы решить проблему.
Я знаю, что это не связано с этим делом, но это одна из возможных причин, по которой метод отображается в getDeclaredMethods (), но не может быть найден с помощью getDeclaredMethod () .