我有一个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
我得到一个错误:
incompatible types: Object cannot be converted to Diff<?>
所以我有:
Required type:
Object
Provided:
Diff
<?>
你知道我如何解决这个问题吗?
如果您有一个泛型类型,比如DiffResult
,但在声明中忽略了它的泛型类型,那么所有方法都会丢失它们的泛型信息。换句话说,如果将字段、变量或参数声明为DiffResult
,而不是DiffResult
这可以用一个非常简单的例子来说明:
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
所以当我尝试的时候,这对我很有效。检查是否导入了正确的库,对项目进行清理和重新构建,等等。这里发生了一些有趣的事情。
public class ListReturnType<X> {
public static void main( String[] args ) {
for( ListReturnType<?> x : getList() ) {
}
}
public static List<ListReturnType<?>> getList() {
return null;
}
}
检查文档,尽管它们似乎匹配。
https://commons.apache.org/proper/commons-lang/apidocs/index.html?org/apache/commons/lang3/builder/DiffResult.html
import lombok.*;
import org.apache.commons.lang3.builder.Diff;
import java.util.List;
@Getter
@Setter
public class UpdatedPositionsData {
private String name;
private String oldValue;
private String newValue;
public void addChangedPositions(DiffrentResult diffResult, 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(updatedData);
}
}
public interface DiffrentResult {
List<Diff<?>> getDiffs();
}
}
这段代码编译起来没有任何问题,所以我不认为有什么问题。GetDiff返回一个Diff列表
我试图通过在一个单独的线程上进行工作并返回所需的对象来更改JavaFX中的GUI。然而,在完成工作和任务之后。setOnSucceeded()在尝试检索创建的对象时被触发,并出现错误“不兼容类型:对象无法转换为VideoScrollPane类型”。 我认为这与原始类型有关,因为这是在听众中发生的,但环顾四周后,我找不到我想要的建议。 任何可以散发的光芒都将不胜感激。
问题内容: 我试图通过在单独的线程上进行工作并返回所需的对象来对JavaFX中的GUI进行更改。但是,在完成工作和task.setOnSucceeded()之后,我尝试检索创建的对象并得到错误“不兼容的类型:对象无法转换为VideoScrollPane类型”。 我认为这与原始类型有关,因为它发生在侦听器中,但是四处查看后,我找不到我想要的建议。 任何可以散发出的光将不胜感激。 问题答案: 这是因为
当我想做Apk文件时,我得到了8个错误,我希望有人帮助我修复它 任务:app:CompileReleaseJavaWithJavac失败C:\codes\code\app\src\main\Java\com\insta\followers\tagsactivity.Java:61:错误:不兼容类型:视图无法转换为LinearLayout unitBanner=findViewById(r.id.u
问题内容: 一般来说,对于Java和编程,我是一个新手。我正在尝试创建一个简单的程序,您可以在其中猜测我的年龄,如果您是对的,它将说“正确”,如果您错了,它将说“错”。 这是我的代码: 我收到错误消息“不兼容的类型:void无法转换为int”,但代码中没有void类?我知道我的代码可能很糟糕,但是如果你们能为我指出正确的方向,那就太好了。谢谢。 问题答案: 您的程序不必返回in 。相反,您可以将其
我正在努力找出导致这个问题的原因。我对Java和BlueJ完全陌生,但我已经研究了几个小时,无法找出问题的原因。不断收到错误消息“不兼容类型:泥水匠无法转换为学徒”。非常感谢您的帮助。 //程序的目的:创建一个混合阵列,以容纳两个不同的学徒对象——泥水匠和木匠//泥水匠和木匠//然后将每个对象的所有细节显示在屏幕上。 学徒班就是这样的
问题内容: 我试图在我的项目中使用对象数组,但出现错误: 在这条线上: 现在我不知道此错误的原因是什么。请帮我 。 问题答案: 您有两种方法,一种是将每个对象emt1,emt2,..强制转换为String,如下所示: 或者,您应该更改属性的类型: 到弦