Intellij IDEAでJavaプログラムを開発している際にStatic interface method calls are not supported at language level '7' Usage of API documented as @since 9+
エラーが発生することがあります.このエラーの原因と対処法を説明します.
問題:Language levelエラー
List.of
を呼び出そうとするとIntellij IDEAがエラーを表示します。List.of()
はJava 9
から利用可能です。プロジェクトSDKはJava 18
を設定しているためコンパイルは問題ないはずです。
List<File> parentDirectories = List.of(path.toFile().listFiles());
エラーメッセージ
Static interface method calls are not supported at language level '7'
Usage of API documented as @since 9+
原因:プロジェクトの言語レベルが古いため
プロジェクトの言語レベルが、サポートされる前のJava 9の言語レベルにセットされているためです。
解消方法:言語レベルの確認と変更
Mavenプロジェクトかそれ以外で変更を加える設定が異なります。
- Mavenプロジェクト以外の場合は設定変更1
- Mavenプロジェクトの場合は設定変更2
設定変更 1 (Maven以外のプロジェクトの場合)
解決するには、Intellij IDEAのプロジェクトに設定されている言語レベルを適切なものに変更すれば良いです。
⌘ ;
でプロジェクト構成設定画面を開きます。または、プロジェクトツールバーでプロジェクトを選択し⌘ ↓
でも開きます。
変更前
7
が設定されています。
変更後
18
に変更します。
Apply→Intellij IDEAの再起動でエラーが解消されます問題なく実行出来ます。
設定変更 2 (Mavenプロジェクトの場合)
Project Structureの画面で、Language Levelを変更しようとすると以下の警告メッセージが表示されていることに気が付きます。
Module 'XXX' is imported from Maven. Any changes made in its configuration might be lost after reimporting.
Project Structureでモジュールに設定したプロジェクトレベルは、Mavenで作成されたプロジェクトの場合、reimportすると失われるということです。
Mavenのpom.xmlで言語レベルを変更します。
変更前
7
になっています。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>7</maven.compiler.source>
<maven.compiler.target>7</maven.compiler.target>
</properties>
18
に変更します。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
</properties>
Shift + ⌘ + I
でMavenの設定をリロードしておきましょう。これでコンパイルエラーも消え、Mavenで問題なくビルド出来ます。
言語レベルについて
プロジェクト言語レベル
プロジェクト言語レベルはIntellij IDEAのページに以下のように説明があります。なるべくプロジェクト言語レベルとプロジェクトSDKはあわせたほうが良さそうです。
プロジェクト言語レベル
https://pleiades.io/help/idea/project-settings-and-structure.html#language-level
言語レベルは、エディターが提供するコーディング支援機能を定義します。言語レベルは、プロジェクト SDK と異なる場合があります。例: JDK 9 を使用し、言語レベルを 8 に設定できます。これにより、インスペクションは Java 8 と互換性がありますが、インスペクションでは Java 9. の構造を使用しないでください。