web-dev-qa-db-ja.com

Java "ラムダ式はこの言語レベルではサポートされていません"

私は、Java 8のいくつかの新機能をテストし、その例を私のIDE(最初はEclipse、次にIntelliJ)にコピーしました 。ここで

Eclipseはラムダ式をまったくサポートしておらず、IntelliJはエラーを報告し続けました

この言語レベルではラムダ式はサポートされていません

これが私のインストール、コード、またはサポートに問題があるかどうかを知りたいのですが。

158
Czipperz

IntelliJ IDEAの場合:

File MenuProject StructureProjectで、Project Language Level8.0 - Lambdas, type annotations etc.に変更します。

Android 3.0以降の場合FileProject StructureModuleappに移動し、PropertiesタブでSource CompatibilityおよびTarget Compatibility1.8 (Java 8)に設定します。

スクリーンショット

enter image description here

248
Abhilash

[ソース]タブ([モジュール]部分)でもソースコードの言語レベルを変更する必要があります。

Change Language Level

92
user2682809

このソリューションはAndroid Studio 3.0以降で動作します。

  1. ファイル>プロジェクト構造>モジュール> app> Propertiesタブ

enter image description here

Source CompatibilityTarget Compatibilityの両方を1.8に変更します

  1. 設定ファイルを編集

対応するbuild.gradleファイルで直接設定することもできます。

Android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
55
Alen Lee

Intellij 13では、以下のナビゲーションでプロジェクト言語レベル自体を8.0に変更するだけです。

File
|
|
 ---------Project Structure -> Project tab
          |
          |________Project language level

Java8

モジュールの言語レベル

Modules lang level用のmavenプラグインがなかったときも私はJava compilerを更新しなければなりませんでした。

File
|
|
 ---------Project Structure -> Modules tab
          |
          |________ language level

Modules lang level

しかし、既にModule lang levelがある場合、このmaven pluginは自動的に修正されます。

    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>

変更後はすべてが良さそう

41
prayagupd

Android Studio Canary Build(3. +)では、次のことができます。

ファイル - >プロジェクト構造 - >モジュールセクションを見てください。あなたのクラスのモジュール名があります。 Javaを1.8バージョンにアップグレードしたいモジュールをクリックしてください。 - >「ソース互換性」と「ターゲット互換性」を1.7以下から1.8に変更。他に何も変更しないでください。 - > [適用]をクリックします

今グラドルは再同期され、あなたのエラーは削除されます。

23
Tarun

Build.gradleアプリケーションにcompileOptionsを追加するだけです。

Android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
18
Morozov

Android Studio 3.0.1以降を使用している最近のユーザーのためのものです。 Alt + Enterをクリックして、言語レベルを8.0にアップグレードします - ラムダ、注釈の入力など。

9
Vivek

言語5ではサポートされていません。(私にとってはモジュールに入っていましたセクション)

Lanaguge Level 5 not supported

5
Kejsi Struga

7.0はラムダ式をサポートしません。言語レベルを8.0に変更するには、これをアプリのグレードに追加するだけです。

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

enter image description here

3
live-love

IntelliJ IDEA 15でJava 8(ラムダなど)でコンパイルする

  • CTRL + ALT + SHIFT + Sまたはファイル/プロジェクト構造

  • プロジェクトタブを開く

  • Project SDKを互換性のあるJavaバージョンに設定する(1.8)

  • プロジェクトの言語レベルを8に設定

  • モジュールを開くタブ

  • 言語レベルを8に設定し、[OK]をクリックします

  • CTRL + ALT + Sまたはファイル/設定

  • ビルド、実行、デプロイ/コンパイラ/ Javaコンパイラ

  • ターゲットバイトコードのバージョンを1.8に変更し、[OK]をクリックします。

2
Daniel de Zwaan

使用:IntelliJ IDEA 2017.1.4ビルド番号IU-171.4694.23

プロジェクト設定/プロジェクトタブで言語レベルを変更しても何も起こりませんでした。代わりに打つ Alt + Enter そして、「言語レベルを8に設定 - ラムダ、タイプ注釈など」を選択します。そしてそれは自動的に解決しました。

2

実際には、EclipseはJava 8をサポートしています。 here および here を参照してください。

  • Keplerの場合、SR2に対する「機能パッチ」として入手可能です(すなわちEclipse 4.3.2)。
  • Luna(Eclipse 4.4)ではそれは標準リリースになるでしょう。 ( リリース予定
2
Stephen C

Pomファイルに次のブロックを追加することは私のために働きました:

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
1
Radi

以下の設定を確認してください。

  1. ファイル - >プロジェクト構造 - >プロジェクトタブ。

    *Project SDK should be set to 8 or above.*
    
  2. ファイル - >プロジェクト構造 - >モジュール。

    *Check that your or all modules has Language level set to 8 or above.*
    
  3. [ファイル] - > [設定](または[その他の設定] - > [新しいアイデア]バージョンの新しいプロジェクトの設定)

    *Search for Java compiler and check if Project byte code version 
    and per module byte code version is set 8 or above.*
    

あなたの問題は上で定義されたカテゴリのどれかに入るかもしれません。

1
thakurnitesh27

同じプロジェクト(Android Studio 3.3.2gradle-4.10.1-all.ZipcompileSdkVersion 28buildToolsVersion '28.0.3')は新しい高速Windowsマシンでも問題なく動作し、古いUbuntuではJava 8のものに赤い下線を引きます。 18.04ノートパソコン(ただし、プロジェクトはUbuntu上でエラーなしでコンパイルされています)。

赤で下線を引かないように強制するために変更した2つのことは、incremental truedexOptionsを除いたことだけです。

compileOptions {
//    incremental true
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

//dexOptions {
//    javaMaxHeapSize "4g"
//}

appレベルのbuild.gradleにあります。

1
isabsent

Stephen Cが指摘したように、パッチのインストール時にEclipse Kepler(4.3)はJava 8をサポートしています(インストール手順 ここ )。

インストールしたら、プロジェクトにJava 8を使用するように指示する必要があります。まずJDKをEclipseに追加します。

  • ウィンドウに移動 - >設定
  • 「Java」 - >「インストール済みのJRE」に移動します。
  • 標準VMを追加し、JREの場所をポイントします
  • それからコンパイラに行きます
  • コンパイラ準拠レベルを1.8に設定

次に、プロジェクトにJDK 1.8を使用するように指示します。

  • プロジェクトに移動 - >設定
  • Javaコンパイラに行く
  • プロジェクト固有の設定を有効にする
  • コンパイラ準拠レベルを1.8に設定
1
Gijs Overvliet

IntelliJやEclipseに上記のプロジェクト固有の設定を適用した後でも、まだ失敗していました。

私にとってうまくいったのは、POM XMLで1.8と設定されたsourceとtargetのMavenプラグインの追加でした:

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

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.abc.sparkcore.JavaWordCount</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>   
     </execution>
            </executions>
        </plugin>
    </plugins>
</build> 
0
Dean Jain

Ctrl + Alt + Shift + Sを押し、次にプロジェクトから言語レベル1.8を選択し、Lambda式についてもっと読む ここ

0
Toseef Zafar

考えられる原因#1(この質問の最初の3つの答えと同じ):プロジェクト構造の設定

  1. [ファイル]> [プロジェクト構造]> [プロジェクト設定]で、[プロジェクト]に移動し、プロジェクトSDKを1.8(バージョン65以降、最新は112)に設定し、プロジェクト言語レベルを8に設定。

  2. [ファイル]> [プロジェクト構造]> [プラットフォーム設定]で、[プロジェクト]に移動し、JDKホームパスが1.8に設定されていることを確認します(バージョン65以上で、最新は112です)。

上記が機能しない場合は、コンパイラのターゲットバイトコードバージョンを確認し、考えられる原因#2に進みます。

考えられる原因#2:コンパイラ

  1. [ファイル]> [設定]> [ビルド、実行、配置]> [コンパイラ]で[Javaコンパイラ]に移動し、プロジェクトバイトコードバージョンを1.8に設定し、すべてのターゲットバイトコードバージョンモジュール。 適用をクリックして、OKを押します。 IntelliJ IDEを再起動します。この時点で、ラムダ式は私のIDEで受け入れられました。

ご多幸を祈る :)

0
kuzevni

Intellij 14では、以下の設定が私のために働きました。 Intellij14設定

0
user5760784

最初にあなたが使っているJDKのバージョンをチェックしてください、それは1.8以上であるべきです。

その場合は、以下の手順に従ってください。

プロジェクトとモジュールの言語レベルをIntellijに変更します。

プロジェクト

1.ファイル - >プロジェクトの構造 - >プロジェクト - >プロジェクトの言語レベル

2.ファイル - >プロジェクトの構造 - >モジュール - >プロジェクトの言語レベル

0
Abhishek Tiwari

ラムダ式でEcpliseをサポートするには:

  1. JDK 1.8を使用していることを確認してください([ウィンドウ] - [設定] - [インストール済みのJREとコンパイラ])。
  2. EclipseがLambdasに関連するリファクタリングを推奨するように、新しい機能インターフェースを定義する場合は、アノテーション@FunctionalInterfaceを使用します( Functional Interfaces 。)
0
Mehdi

この答えは新しい更新されたintelliJのために働いていない...新しいintelliJのために..

- >ファイル - >プロジェクト構造 - >グローバルライブラリ==> JDK 1.8以上のバージョンに設定してください。

ファイル - >プロジェクト構造---> projects ===>「プロジェクト言語マニュアル」を8に設定

ファイル - >プロジェクト構造---> project sdk ==> 1.8

これにより、プロジェクトのラムダ式が有効になります。

0
Abhijit

私にとっては提供された解決策はどれもうまくいきませんでした。

これが最後の手段です。 - >プロジェクトの.imlファイルを開くと、LANGUAGE_LEVELがJDK_1_8または希望のバージョンに変更されます。 - >これでうまくいかない場合は、プロジェクトのルートディレクトリで "JDK"をgrepして、バージョン設定を含むファイルを見つけて、それを好みのバージョンに設定してください。