0

我有这个用于比较数据的 Java 方法:

org.apache.commons.lang3.builder.Diff;

public void addChangedPositions(DiffrentResult diffrentResult , List<UpdatedPositionsData> updatedPositionsData) {
    for (Diff<?> diff : diffResult.getDiffs()) {
      UpdatedPositionsData updatedData = new UpdatedPositionsData();
      updatedData.setName(diff.getFieldName() == null ? null : diff.getFieldName());
      updatedData.setOldValue(diff.getLeft() == null ? null : diff.getLeft().toString());
      updatedData.setNewValue(diff.getRight() == null ? null : diff.getRight().toString());
      updatedPositionsData.add(updatedField);
    }    
  }
........

@Getter
@Setter
public class UpdatedPositionsData {

  private String name;
  private String oldValue;
  private String newValue;

}

使用版本'org.apache.commons:commons-lang3:3.8.1'它工作正常。但是当我切换到版本时,implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'我收到这条线的错误for (Diff<?> diff : diffResult.getDiffs()) {

我得到错误:

incompatible types: Object cannot be converted to Diff<?>

所以我有:

Required type:
Object

Provided:
Diff
<?>

你知道我该如何解决这个问题吗?

4

1 回答 1

0

我在回答你的另一个问题时说过,不兼容的类型:对象不能转换为 Diff<?>,如果你使用原始类型,就会发生这种情况。

现在我做了一些检查,并DiffResult改变了。在 3.8.1 版中,它不是通用类:https ://javadoc.io/doc/org.apache.commons/commons-lang3/3.8.1/org/apache/commons/lang3/builder/DiffResult.html . 它是Iterable<Diff<?>>,但它没有自己的泛型类型。在 3.10 版中,它变得通用:https ://javadoc.io/doc/org.apache.commons/commons-lang3/3.10/org/apache/commons/lang3/builder/DiffResult.html 。

我之前的回答也显示了解决方案:使用DiffResult<?>.

于 2022-02-27T15:33:12.583 回答