我写了一些感觉像黑客的代码。
private void handleSpecialCase(Method mvw, InterfacePersistenceBean pObj, AbstractBeanWrapper wrapper, String methodCore)
throws TestStructureException
{
try {
Parameter p= getParameterByName(methodCore, this.PREFIX_SET,pObj);
Method mp=null;
try {
mp = pObj.getClass().getMethod("set"+methodCore, new Class[]
{ p.getType() });
}
catch(NoSuchMethodException e) {
mp = pObj.getClass().getDeclaredMethod("set"+methodCore, new Class[]
{ p.getType() });
}
Method serviceMethod = beanByIdService.getClass().getMethod("get"+methodCore, new Class[]
{ java.lang.Long.class });
InterfacePersistenceBean beanToSet=(InterfacePersistenceBean)serviceMethod.invoke(beanByIdService, mvw.invoke(wrapper));
mp.setAccessible(true);
mp.invoke(pObj, beanToSet);
}
catch (Exception e) {
SS.getLogger().error(e.getMessage()+" "+e.getCause(),e);
throw new TestStructureException(e.getMessage(), e.getStackTrace());
}
内部try块(即getMethod()
)将从超类获取方法,但不会获得受保护或私有方法。如果某个方法受到保护,则会抛出NoSuchMethodException
。
因此内部catch块使用getDeclaredMethod()
,它将获得受保护和私有方法,但会在超类方法上抛出NoSuchMethodException
。
一个受保护/私有的超类方法总会在这里抛出异常,这对我的目的来说很好,但仍然不够优雅。
有人可以建议更灵活,更健壮,更优雅的方法(最好不使用注释)吗?