【问题标题】:Fixing error in java: incompatible types: java.lang.Object cannot be converted to capture#1 of?修复 java 中的错误:不兼容的类型:java.lang.Object 无法转换为 capture#1 of?
【发布时间】:2015-04-25 19:25:08
【问题描述】:

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

final Object value;

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

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

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

集合变量在上述两种情况下都是通用的,括号和问号在本文中没有通过。

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

c.add(value)

我收到错误消息:

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

add方法在Collection中声明为:

boolean add(E e);

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

【问题讨论】:

  • 请发布一些实际代码来演示问题。
  • "带有括号和一个问号,在本文中没有通过。" - 将您的文本格式化为code
  • Collection<?> 表示:一个未知类型的集合。它可以是 Collection、Collection 或 Collection。你不知道。很明显,您不能将随机对象添加到该集合中:如果对象是字符串,并且集合是 Collection,则会破坏其类型安全性。
  • argumentDefinition.getFieldValue() 返回什么?什么类型?
  • pathfinderelite - argumentDefinition.getFieldValue() 返回和 Object.

标签: java generics


【解决方案1】:

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

【讨论】:

  • 我假设我们必须保留集合的通用性,但由于只添加了对象,这看起来不错,并且代码有效。谢谢。
【解决方案2】:

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

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

【讨论】:

  • 谢谢 - 使用 Object 使集合具体化。由于他们使用原始类型,我假设他们需要保留泛型,但我认为这没关系
【解决方案3】:

之前只转换为 E -- 这可能会解决问题

boolean add(E (E)e);

【讨论】:

    【解决方案4】:

    您应该执行以下操作:

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

    然后代码将编译并运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 2016-10-17
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2019-02-26
      相关资源
      最近更新 更多