Есть ли более элегантный способ итерации объектов методами и проверки всех этих условий Java - PullRequest
0 голосов
/ 23 января 2019

У меня есть следующий код на Java, и я хочу свести его к минимуму или написать его более кратко.Можете ли вы помочь мне, если это возможно?

return( Objects.equals(obj1.getMeaning(), obj2.getMeaning())
        && Objects.equals(obj1.getModifies(), obj2.getModifies())
        && Objects.equals(obj1.getOriginalCommentString(), obj2.getOriginalCommentString())
        && Objects.equals(obj1.getReferences(), obj2.getReferences())
        && Objects.equals(obj1.getReturnDescription(), obj2.getReturnDescription())
        && Objects.equals(obj1.getReturnType(), obj2.getReturnType())
        && Objects.equals(obj1.getSuppressions(), obj2.getSuppressions())
        && Objects.equals(obj1.getTemplateTypeNames(), obj2.getTemplateTypeNames())
        && Objects.equals(obj1.getThisType(), obj2.getThisType())
        && Objects.equals(obj1.getThrownTypes(), obj2.getThrownTypes())
        && Objects.equals(obj1.getTypedefType(), obj2.getTypedefType())
        && Objects.equals(obj1.getType(), obj2.getType())
        && Objects.equals(obj1.getVersion(), obj2.getVersion())
        && Objects.equals(obj1.getVisibility(), obj2.getVisibility()))

Является ли хорошей практикой давать список методов в виде строк, а затем создавать функцию карты для проверки их всех по одному.Я читал об отражении в Java, но я не настолько опытен.

1 Ответ

0 голосов
/ 23 января 2019

У вас может быть такой метод:

<T> boolean equals(T obj1, T obj2, Iterable<? extends Function<? super T, ?>> fns) {
  for (Function<? super T, ?> fn : fns) {
    if (!Objects.equals(fn.apply(obj1), fn.apply(obj2))) {
      return false;
    }
  }
  return true;
}

и затем назовите это как:

return equals(obj1, obj2, Arrays.asList(Thing::getMeaning, Thing::getModifies));

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...