Привет, долгое время слушатель, впервые звонящий, и я задаю вопрос, связанный с рефлексией Java, и как легко она поддается, по-видимому, уродливому кодированию. Следующий метод пытается взять два одинаковых объекта (один объект имеет все поля другого объекта, а затем несколько) и сравнить два из них на равенство. Он (предположительно) вернет истину, если получатели, разделяемые объектами, равны, и вернет ложь, если они не равны.
public boolean validateArchive( Object record, Object arcRecord ) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
{
log.debug( record.getClass().toString() );
Object methodValue;
Object arcMethodValue;
for ( Method method : record.getClass().getMethods() )
{
if ( method.getTypeParameters().length == 0 && method.getName().startsWith( "get" ) && !method.getName().startsWith( "getClass" ) )
{
methodValue = method.invoke( record );
arcMethodValue = arcRecord.getClass().getMethod( method.getName() ).invoke( arcRecord );
log.debug( "Method name: " + method.getName() );
log.debug( "Archive value: " + arcMethodValue );
log.debug( "Object value: " + methodValue );
if ( arcMethodValue != null && methodValue != null && !arcMethodValue.equals( methodValue ) )
{
return false;
}
else
{
if ( arcMethodValue == null && methodValue != null || methodValue == null && arcMethodValue != null )
{
return false;
}
}
}
}
return true;
}
Этот метод делает то, что я ожидаю, что он сделает в модульных тестах, но выглядит уродливо, и чувствует себя неправильно (я особенно не фанат вложенного «если»). Я просто надеялся на некоторые советы о том, как сделать это более эффективно / результативно. Если я нарушил какое-то правило публикации, не стесняйтесь поправлять меня, я стремлюсь учиться и т. Д.