我有下面的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反射的文章,但我并不熟练。
答案 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));
等