Intellij - Nie można użyć nowszych klas Java 8 - Błąd: „Użycie interfejsu API udokumentowano jako @since 1.6+ ..”


168

Próbuję użyć java.lang.function.Functionw mojej bazie kodu Java 8, ale w Intellij pojawia się następujący błąd.

Użycie API udokumentowane jako @since 1.6+ Ta inspekcja pozwala znaleźć wszystkie zastosowania metod, które mają tag @since w ich dokumentacji. Może to być przydatne, gdy programowanie jest wykonywane w nowszej wersji zestawu SDK jako docelowej platformy produkcyjnej

Wydaje mi się, że mam prawidłowe ustawienia projektu i kompilatora

Ustawienia projektu: (Plik -> Struktura projektu)

Project Settings -> Project -> Project SDK = Java 1.8
Project Settings -> Project -> Project Language Level = 8 - Lambdas, Type Annotations etc

Ustawienia kompilatora: (Plik -> Ustawienia)

Build, Execution, Deployment -> Compiler -> Java Compiler -> Project Bytecode Version : 1.8
Build, Execution, Deployment -> Compiler -> Java Compiler -> Per module Bytecode Version -> Target Bytecode Version : 1.8

Jaki jest problem?

Odpowiedzi:


365

Zredagowano odpowiedź na podstawie komentarza Bastiena Jansena.

Wygląda na to, że istnieje inne ustawienie projektu, które ma wpływ na poziom kompilatora. Subtelną oznaką tego problemu jest sytuacja, w której kompilator zaczyna narzekać, że źródłowa i docelowa wersja Java różni się od podanej podczas kompilowania kodu

Warning:java: source value 1.5 is obsolete and will be removed in a future release
Warning:java: target value 1.5 is obsolete and will be removed in a future release
Warning:java: To suppress warnings about obsolete options, use -Xlint:-options.

Aby się tego pozbyć, musisz się otworzyć

File -> Project Structure -> Project Settings -> Modules -> "Your Module Name" -> Sources -> Language Level

i zmień go na żądany poziom, tj. 1.8 lub domyślny poziom języka projektu


6
W ustawieniach projektu należy skonfigurować każdy moduł tak, aby używał Project defaultpoziomu języka (w Sourceszakładce).
Bastien Jansen

@BastienJansen thanks. Zredagowałem odpowiedź na podstawie twoich komentarzy!
Nerrve

7
Project Settingsznajduje się wFile -> Project Structure
Karl

6
Nie rozumiem, dlaczego trzeba to ustawić w tak wielu miejscach. Dzięki.
Richard Rast

1
To ustawienie projektu jest nadpisywane podczas ponownego importu, jeśli używasz Mavena. Dzieje się tak za każdym razem, gdy zmieniasz pom, i szybko frustruje Cię konieczność aktualizowania ustawień Intellij. W przypadku projektów Maven bardziej odpowiednie są poniższe zmiany pom.
Jay

51

Jeśli używasz mavena, dodaj poniższy wiersz do pliku konfiguracyjnego pom.xml , a następnie ponownie zaimportuj lub skompiluj go z mavena.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

W przeciwnym razie wybierz kompilator java i poziom języka z poniższej ścieżki.

Plik> Struktura projektu> Ustawienia projektu> Moduły> nazwa modułu> Źródła> Poziom języka> wybierz ten, którego potrzebujesz.

wprowadź opis obrazu tutaj

Zmień poziom języka tutaj: -

wprowadź opis obrazu tutaj


1
Dziękuję bardzo za to. Nie wiem, dlaczego to nie jest domyślne. Nawet w 2019.1.3, którego używam.
eodeluga

33

W rzeczywistości, jeśli używasz Maven i pom.xmlwłaściwości projektu są skonfigurowane poprawnie

<project xmlns="...> 
....
<properties>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project

Możesz ponownie zaimportować parametry Mavena do intellij-ideaprojektu - kliknij prawym przyciskiem myszy wpis główny projektu, Maven -> Reimportktóry znajduje się na dole.

zdjęcie pokazuje, że Maven jest drugim od ostatniego elementu w menu prawym przyciskiem myszy projektu


25

Po prostu naprawiłem to w następujący sposób:

Kliknij prawym przyciskiem myszy projekt -> Otwórz ustawienia modułu -> Moduły -> Źródła -> 8 lub nowszy

wprowadź opis obrazu tutaj

I wtedy

wprowadź opis obrazu tutaj

Jeśli nadal napotykasz błąd i używasz maven , musisz dodać konfigurację kompilacji w pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

4

Plik> Ustawienia> Kompilacja, wykonanie, wdrożenie> Kompilator Java

Zmień docelową wersję kodu bajtowego na 1.8 modułu, dla którego pracujesz.

Jeśli używasz Maven

Dodaj wtyczkę kompilatora do pom.xml w węźle projektu najwyższego poziomu:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>


1

Jeśli używasz Gradle, nie zapomnij upewnić się, że następujące jest ustawione na 1.8, a nie 1.5 (na przykład z jakiegoś dziwnego powodu w Intelij domyślnie jest to 1.5), więc bez względu na to, co zrobisz na poziomie projektu, aby ustawić kompilator poziom zgodności, to ustawienie będzie nadal powodować problemy z funkcjami Java 8, których nie rozpozna:

version '1.0-SNAPSHOT'

apply plugin: 'groovy'
apply plugin: 'java'

sourceCompatibility = 1.8

1

Może twoja konfiguracja repozytorium ma właściwości obejmują wersję kompilatora. zbadać settings.xmlplik.

<jdk>1.8</jdk>
</activation>
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>

1

Jest jeszcze jedno miejsce, które może powodować ten problem, niezależnie od tego, czy używasz Maven, czy Gradle.

W Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language levelprogramie domyślnym (wydaje mi się) jest Respecting to project language level settings, ale można to ustawić Higher than:, co ignoruje ustawienia projektu.

Oznacza to, że jeśli zastosujesz się do instrukcji zawartych w innych odpowiedziach i ustawisz poziom języka projektu na, powiedzmy, 8, ale inspekcja jest ustawiona na Higher than: 7, IDEA nadal będzie pasować.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.