簡體   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