Próbuję stworzyć grę Scrabble przy użyciu Java w IntelliJ. Zdecydowałem się użyć Map<Character, Integer>, który będzie zawierał każdą płytkę z literą i odpowiadającą jej wartość punktacji. Pomyślałem, że mógłbym użyć skrótu ofEntries do zainicjowania wartości mapy, ale za każdym razem, gdy próbuję skompilować program, pojawia się błąd.

error: cannot find symbol Map.entry('A',1)  
symbol: method entry(char,int)  
location: interface Map  
26 errors (1 for each Map entry)

Na początku myślałem, że może to mieć coś wspólnego z mapą typu Character, Integer i błędem wspominającym entry(char,int), ale rozumiem, że Java używa autoboxingu między prymitywami a ich opakowaniami obiektów.

import java.util.Map;

class Scrabble {
    private final Map<Character, Integer> LETTER_SCORES = Map.ofEntries(
            Map.entry('A',1), Map.entry('E',1), Map.entry('I',1), Map.entry('O',1),
            Map.entry('U',1), Map.entry('L',1), Map.entry('N',1), Map.entry('R',1),
            Map.entry('S',1), Map.entry('T',1), Map.entry('D',2), Map.entry('G',2),
            Map.entry('B',3), Map.entry('C',3), Map.entry('M',3), Map.entry('P',3),
            Map.entry('F',4), Map.entry('H',4), Map.entry('V',4), Map.entry('W',4),
            Map.entry('Y',4), Map.entry('K',5), Map.entry('J',8), Map.entry('X',8),
            Map.entry('Q',10), Map.entry('Z',10)
    );

    private String word;
    private int wordScore;

    Scrabble(String word) {
        this.word = word;
    }
1
Russell Knight 19 grudzień 2019, 16:11
7
Upewnij się, że IDE jest skonfigurowane z poprawnym kompilatorem java. Kompilacja nie powiedzie się dla java < 9
 – 
Yogesh Badke
19 grudzień 2019, 16:15
2
Myślę, że @YogeshBadke ma rację. Ten sam błąd otrzymuję przy JDK 1.8. Z 1.12 nie.
 – 
T.J. Crowder
19 grudzień 2019, 16:18
2
@HovercraftFullOfEels, Map.entry został dodany tylko w Javie 9. W 1.8 nie miałbyś go skompilowany, chyba że używasz JDK >=9 z kompatybilnością źródeł ustawioną na 1.8.
 – 
M. Prokhorov
19 grudzień 2019, 16:19
1
@HovercraftFullOfEels: Ustawienie AFAIK Zgodność z Eclipse zmienia tylko akceptowane konstrukcje na poziomie języka. Nadal używa dowolnego skonfigurowanego JDK, aby znaleźć istniejące metody.
 – 
Joachim Sauer
19 grudzień 2019, 16:20
1
Dzięki za wyjaśnienia/poprawki
 – 
Hovercraft Full Of Eels
19 grudzień 2019, 16:20

1 odpowiedź

Przejdź do Struktura projektu | Projekt | Project SDK i zdefiniuj tutaj JDK & gt; 9 i poziom języka & gt; 9. Przejdź także do Struktura projektu | Moduły i sprawdź, czy odpowiedni poziom języka dla modułu jest również zdefiniowany tutaj. Twój przykładowy kod powinien się bezbłędnie skompilować za pomocą JDK & gt; 9, jak słusznie wspomniano w komentarzach.

1
Olga Klisho 19 grudzień 2019, 21:43
1
Warto też sprawdzić Preferencje | Kompilacja, wykonanie, wdrażanie | Kompilator | Java Compiler i zmień wersję kodu bajtowego projektu na żądaną wersję Java.
 – 
privalou
6 wrzesień 2020, 13:37