有没有一种更优雅的方法来迭代对象方法并测试所有这些条件Java

时间:2019-01-22 22:06:11

标签: java syntax

我有下面的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 :(得分:4)

您可以使用类似的方法:

<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));