2014-06-18 25 views
1

我有我的機器上工作好代碼:的方法代替(字符串,ArrayList的<>)是未定義的類型HashMap的

ArrayList<Posting> postings = invertedLists.get(key); 
//---- Apply some changes on postings -----  
invertedLists.replace(key, postings); 

當我的朋友克隆它給了她這個錯誤代碼:

The method replace(String, ArrayList<Posting>) is undefined for the type HashMap<String,ArrayList<Posting>> 

注:invertedLists是HashMap<String,ArrayList<Posting>>

我們在我的項目檢查;我正在使用JavaSE-1.6,她使用JavaSE-1.7。

什麼會導致此問題?

+0

請給出一個簡短的*完整*程序來演示問題。 (代碼爲我編譯。) –

+4

我*懷疑*您實際上使用Java 8,因爲'replace'方法被引入然後... –

+0

這可能有所幫助 - http://www.buggybread.com/2012 /11/error-method-contains-methodname.html –

回答

6

Map.replace在Java 1.8中首次聲明(請參閱底部的「since:1.8」)。您必須針對1.8 JDK進行編譯(即使您正在編譯1.6模式)。例如,可以在IDE中執行此操作:將語言兼容性模式設置爲一個版本,但是針對另一版本的JDK進行編譯。我偶然發生過這樣的事情。

你的朋友正在編譯「正常」1.7,它沒有聲明該方法。

+0

in eclipse:Project - > properties - > java compiler,我看到1.6,我應該在哪裏檢查我是否使用java 8? – Andi

+0

Windows - >首選項 - > Java - >編譯器:1.4 – Andi

+1

發現它,也許是這樣的:Windows - >首選項 - > Java - >已安裝JREs - >有一個Java 8那裏,檢查。 – Andi

-3

您正在查找的方法是invertedLists.put(key, postings);。 編輯:根據Java文檔,replace()不是HashMap的API的一部分。

+1

這並不能解釋爲什麼它不在另一臺機器上編譯。 –

+1

我相信問題是「_What會導致此問題嗎?_」 – csmckelvey

+0

根據文檔(http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html),replace is不是標準中的HashMap方法。 – user1207177

0

沒有方法replace(K,V)HashMap<K,V>,在Java 7,你必須使用JDK 8爲此。

相關問題