2015-04-25 46 views
2

我的代碼聲明Object類型的值的變量:java中修復錯誤:不兼容的類型:java.lang.Object不能轉換爲捕獲#1的?

final Object value;

此變量然後裝載有物體。然後

泛型集合變量聲明,並加載:

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

收集變量是在上述兩種情況下通用的,用支架和一個問號不本文中通過。

當我嘗試使用集合的Add方法:

c.add(value)

我得到的錯誤信息:

的java:不兼容的類型:java.lang.Object中不能轉換捕獲#1的?

add方法聲明中集爲:

boolean add(E e);

我如何解決這個錯誤?我想我明白髮生了什麼 - 編譯器爲Object不兼容的泛型類型創建一個佔位符。我不能使用原始類型的集合,因爲我試圖消除代碼中的原始類型。我是否需要使用助手功能,如果有的話,究竟如何?謝謝。

+1

請張貼一些演示問題的實際代碼。 – OldCurmudgeon

+0

「,括號和問號在本文中沒有通過。」 - 將文本格式設置爲「代碼」 – pathfinderelite

+4

'集合'表示:未知類型的集合。它可以是Collection 或Collection 或Collection 。你不知道。很明顯,你不能爲該集合添加一個隨機對象:如果該對象是一個字符串,並且該集合是一個集合,那麼這會破壞它的類型安全性。 –

回答

0

如果不知道argumentDefinition.getFieldValue()返回的是什麼,很難分辨出問題的具體原因,但可能的解決方案是將您的變量類型從Collection<?>更改爲Collection<Object>

+0

我假設我們必須保留集合的通用性質,但由於只添加了對象,所以這看起來很不錯,而且代碼正常工作。謝謝。 –

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

謝謝 - 使用Object工程製作具體的集合。由於他們使用原始類型,我假設他們需要保留泛型,但我認爲這是可以的 –

0

你應該做到以下幾點:

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

然後代碼將編譯和運行。

相關問題