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

时间:2015-04-25 19:25:09

标签: java generics

我的代码声明了一个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不兼容的泛型类型创建占位符。我不能使用原始类型进行集合,因为我试图消除代码中的原始类型。我是否需要使用帮助函数,如果是这样,究竟如何?谢谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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());
    }
}

答案 2 :(得分:0)

您应该执行以下操作:

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

然后代码将编译并运行。