我有这个 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(使用前将#替换为@)