繁体   English   中英

修复 java 中的错误:不兼容的类型:java.lang.Object 无法转换为 capture#1 of?

[英]Fixing error in java: incompatible types: java.lang.Object cannot be converted to capture#1 of?

我的代码声明了一个 Object 类型的值变量:

final Object value;

然后用一个对象加载这个变量。

然后声明并加载一个通用集合变量:

final Collection<?> c = (Collection<?>) argumentDefinition.getFieldValue();

集合变量在上述两个实例中都是通用的,在本文中没有通过括号和问号。

当我尝试使用集合的 add 方法时:

c.add(value)

我收到错误消息:

java:不兼容的类型:java.lang.Object 无法转换为捕获 #1 的 ?

add 方法在 Collection 中声明为:

boolean add(E e);

我该如何修复错误? 我想我明白发生了什么 - 编译器为 Object 不兼容的泛型类型创建了一个占位符。 我不能为集合使用原始类型,因为我试图消除代码中的原始类型。 我是否需要使用辅助函数,如果需要,具体如何使用? 谢谢你。

在不知道argumentDefinition.getFieldValue()返回什么的情况下,很难确定您的问题究竟是什么,但可能的解决方案是将您的变量类型从Collection<?>更改为Collection<Object>

可以换吗? 与对象。 我认为它会起作用

import java.util.ArrayList;
import java.util.Collection;

public class KaviTemre {
    final Object value="kavi";
    public static void main(String[] args) {
    new KaviTemre().myMethod();
    }
    void myMethod()

    {
        Collection<Object> obj = new ArrayList<Object>();
        final Collection<Object> c = (Collection<Object>)obj;
        c.add(value);

        for(Object o:c)
            System.out.println(o.toString());
    }
}

之前只是投射到 E - 这可能会解决问题

boolean add(E (E)e);

您应该执行以下操作:

((Collection<Object>)c).add(value);

然后代码将编译并运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM