Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有更优雅的方法来迭代对象方法和测试所有这些条件_Java_Syntax - Fatal编程技术网

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

Java 有没有更优雅的方法来迭代对象方法和测试所有这些条件,java,syntax,Java,Syntax,我用Java编写了以下代码,我希望将其最小化或以更简洁的方式编写。如果这是可行的,你能帮我吗 return( Objects.equals(obj1.getMeaning(), obj2.getMeaning()) && Objects.equals(obj1.getModifies(), obj2.getModifies()) && Objects.equals(obj1.getOriginalCommentString(), o

我用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中反射的文章,但我不是那么精通

您可以使用如下方法:

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

等等。

您可以使用如下方法:

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

等等。

为什么不在类上实现equals?使用此逻辑重写equals方法如果您决定实现equals,请先阅读以下内容:14个字段太多,试着把它们分解成几个classes@AndrewTobilko为什么14个字段太多?为什么不在你的类上实现equals?用这个逻辑重写equals方法如果你决定实现equals,请先阅读:14个字段太多,试着将它们分解成几个classes@AndrewTobilko为什么14块地太多了?这对我来说越来越重要了。有没有办法把最后一个参数变成vararg,这样就不需要调用asList了?我越来越感兴趣了。有没有办法将最后一个参数转换为vararg,这样就不需要调用asList?