Метод replace(String, ArrayList) не определен для типа HashMap

#java #hashmap #java-7

#java #hashmap #java-7

Вопрос:

У меня есть код, который хорошо работает на моей машине:

 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.

Что может вызвать эту проблему?

Комментарии:

1. Пожалуйста, дайте короткую, но полную программу, демонстрирующую проблему. (Код компилируется для меня.)

2. Я подозреваю , что вы на самом деле используете Java 8, учитывая, что replace метод был введен тогда…

Ответ №1:

Map.replace впервые был объявлен в Java 1.8 (см. «начиная с: 1.8» внизу). Вы должны компилироваться с использованием JDK 1.8 (даже если вы компилируете в режиме 1.6). Это можно сделать, например, в среде IDE: установить режим совместимости языков для одной версии, но скомпилировать для JDK другой версии. Я делал это случайно пару раз.

Ваш друг компилируется на «обычном» 1.7, в котором этот метод не объявлен.

Комментарии:

1. в eclipse: Project -> properties -> java compiler я вижу 1.6, где я должен проверить, использую ли я java 8?

2. Windows -> Настройки -> Java -> Компилятор : 1.4

3. нашел, может быть, это так: Windows -> Настройки -> Java -> Установленные JREs -> там есть java 8, проверил.

Ответ №2:

В replace(K,V) Java 7 HashMap<K,V> нет метода для a , для этого вам нужно использовать JDK 8 .

Ответ №3:

Метод, который вы ищете, это invertedLists.put(key, postings); . РЕДАКТИРОВАТЬ: согласно документации Java, replace() не является частью API для HashMap .

Комментарии:

1. Это не объясняет, почему он не компилируется на другой машине.

2. Я полагаю, что вопрос был » Что может вызвать эту проблему? »

3. Согласно документации ( docs.oracle.com/javase/7/docs/api/java/util/HashMap.html ), replace не является методом HashMap в стандарте.

4. Все еще не совсем корректно. replace() действительно является частью HashMap API в Java 8.