【发布时间】: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.