![](/img/trans.png)
[英]Type safe merging of Map with multiple types for its value; `incompatible types java.lang.Object cannot be converted to 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.