不兼容的类型:对象无法转换为 Diff

2024-04-25

我有这个 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;

}

但对于这一行for (Diff<?> diff : diffResult.getDiffs()) {

我收到错误:

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

所以我有:

Required type:
Object

Provided:
Diff
<?>

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

P.S 不幸的是问题没有解决。

我创建了这个小示例代码:

https://github.com/rcbandit111/hateos_poc/blob/main/src/main/java/com/hateos/test/assembler/CodeLogAssembler.java#L14 https://github.com/rcbandit111/hateos_poc/blob/main/src/main/java/com/hateos/test/assembler/CodeLogAssembler.java#L14

您能建议如何修复吗?


如果你有一个通用类型,比如DiffResult,但是您在声明中省略了其泛型类型,那么所有方法都会丢失其泛型信息。换句话说,如果您将字段、变量或参数声明为DiffResult代替DiffResult<WhatEverType>,那么它的getDiffs()方法不返回List<Diff<?>>但反而List- 没有任何通用信息。

这可以用一个非常简单的例子来证明:

class MyClass<T> {
    List<String> strings() {
        return List.of("a", "b", "c");
    }
}
MyClass m = new MyClass(); // raw type warning ignored
List<String> strings = m.strings(); // compiler warning
for (String s : m.strings()) { // compiler error, like the one you're getting
}

所以我的猜测是,你省略了通用类型DiffResult。如果是这样,修复很简单:添加泛型类型,或者如果您不知道或不关心,请使用通配符:DiffResult<?>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不兼容的类型:对象无法转换为 Diff 的相关文章

随机推荐