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


198

ここに示すように、Java 8のいくつかの新機能をテストし、サンプルをIDE(元々はEclipse、次にIntelliJ)にコピーしました

Eclipseはラムダ式をまったくサポートしていません。IntelliJはエラーを報告し続けました

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

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


3
これはIDEの問題です。コンパイラーのコンプライアンスを変更する必要があります。
Sotirios Delimanolis 2014年

6
IDEAで、[ファイル]-> [プロジェクト構造]を選択します。言語レベルを変更するオプションがあります
fge 2014年

1
@Czipperz:では、タイトルに「解決済み」の注釈を付けないでください。チェックマークをクリックして、ベストアンサーに「承認済み」のマークを付けます。これは、回答者に報酬を与え、質問が問題を解決する回答を持っていることを示します。回答がなくても正しい解決策が得られない場合は、自己回答を投稿して、それを(待機期間の後に)承認済みとしてマークすることができます。
Lawrence Dol 2014年


@LawrenceDol回答としてではなくコメントとして投稿したため、このように注釈を付けました。
Czipperz 2014年

回答:


344

IntelliJ IDEAの場合:

ではFile MenuProject StructureProject、変更Project Language Level8.0 - Lambdas, type annotations etc.

アンドロイド3.0+行くためFileProject StructureModuleappとのプロパティ]タブのセットSource CompatibilityTarget Compatibilityします1.8 (Java 8)

スクリーンショット:

ここに画像の説明を入力してください


69
提案された編集からのメモ:すべてのモジュールの言語レベルを設定することもできますFile Menu → Project Structure → Modulesが、デフォルトではプロジェクトの言語レベルと同じになります。
user1516873

6
Android Studioでも同じ問題に直面しており、上記のIDEで同じ設定が見つかりません。なにか提案を !
CoDe

18
@Shubh:でGradleでは、これらの行を追加し、あなたのコードは動作します: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
IntelliJ 15アップグレードした後、プロジェクトの言語レベルを9 に変更し、それを有効にするには8に戻す必要がありました。
averasko 2015年

17
この回答は古くなっています。Android 3.1.2でFile-> Project Structure->に移動しModule you want to support lambdasソース互換性ターゲット互換性1.8に設定します
Ivan

98

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

言語レベルを変更する


3
あなたの答えはもっと高くするか、他の答えと一緒にする必要があります
muni764

2
+1。モジュールの優先順位はプロジェクトの優先順位よりも高くなっています。したがって、モジュール部分の言語レベルを設定することを好みます。
Ge Liu

これにはIntelliJにも必要なモジュールは含まれていません。IntelliJのこちら側に夢中ではなく、同じことをチェックする場所が多すぎます。
SpacePrez 2017

驚くばかり。どうもありがとうございます。これは私の日を救った。ラムダ式を有効にするために何をする必要があるのか​​わからないエラーに悩んでいました。
Siddhartha Thota 2017年

私は春のブートapを実行していて、ラムダ式の使用を開始した後に何が問題だったかわからなかったので、プロジェクトの設定を変更しましたが、このモジュールの設定に従って、問題なく動作しました。
Siddhartha Thota 2017年

75

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

  1. ファイル>プロジェクト構造>モジュール>アプリ>プロパティタブ

ここに画像の説明を入力してください

両方を変更Source CompatibilityしてTarget 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
  }
}

42

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

モジュールの言語レベル

しかし、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>

変更後、すべてが良さそうです


5
@Czipperz:この回答には写真があります。私は実際にそれを好む。なぜなら、私は実際に、受け入れられた回答が言及したスポットをすでに見ていたが、ドロップダウンに気づかなかったからである。この回答には、オプションがある正確な場所を強調する写真があります。
ArtOfWarfare 2015

2
pom.xmlファイルに関する部分は本当に役に立ちます、ありがとう!
Kevin Zhao

3
モジュールの言語レベルを変更した後、私の問題が修正されました
nihasmata

23

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

File-> Project Structure-> Look in Modules Section、クラスのモジュールの名前があります。Javaを1.8バージョンにアップグレードするモジュールをクリックします。->「ソース互換性」および「ターゲット互換性」を1.7以下から1.8に変更します。それ以外は変更しないでください。-> [適用]をクリックします

今度はgradleが再同期し、エラーが削除されます。


18

compileOptionsbuild.gradleにアプリを追加するだけです。

android {


...

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

2
Googleは数週間前にJackを廃止することを発表しました。Javaの8言語がサポートは現在、ネイティブ4.ルックのAndroid Studioの2.4のプレビューを開始し、アンドロイドのGradleプラグインによって提供されていますここで
nilsi

9

Android Studio 3.0.1以降を使用している最新のユーザー向け。Alt + Enterをクリックして、言語レベルを8.0にアップグレードします-ラムダ、タイプ注釈など。


簡単で他より優れている
Abhishek Singh

6

言語5サポートされていない場合は、これを確認してください(私にとっては、モジュールセクションにありました)。

Lanagugeレベル5はサポートされていません


5

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

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

ここに画像の説明を入力してください



2

IntelliJ IDEA 15でJava 8(lambdasなど)を使用してコンパイルするには、

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

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

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

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

  • [モジュール]タブを開く

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

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

  • ビルド、実行、配置/コンパイラ/ Javaコンパイラ

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


2

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

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


1

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

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

  • ウィンドウに移動->設定
  • Java-> Installed JREsに移動します
  • 標準VMを追加し、JREの場所を指す
  • 次にコンパイラに移動します
  • コンパイラー準拠レベルを1.8に設定します

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

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

1

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

  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

同じプロジェクトは、( 、Android Studio 3.3.2gradle-4.10.1-all.zipcompileSdkVersion 28buildToolsVersion '28.0.3'で正常に動作し、新しい高速のWindowsマシンと下線Java 8の赤い色でものを古いUbuntuの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



0

IntelliJとEclipseに上記で定義されたプロジェクト固有の設定を適用した後でも、それでも失敗しました!

私のために働いたのは、POM XMLの1.8設定のソースとターゲットを含む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

考えられる原因#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で受け入れられました。

ご多幸を祈る :)


2
これはほぼ3年前のことです。
Czipperz 2016年

これは、グーグルを使ってすでに解決された問題をチェックする人向けです。業界で働く人々はこれを知っています。
kuzevni 2016年

0

私にとって、提供されたソリューションはどれも機能しませんでした。

これが最後の手段です。->プロジェクトの.imlファイルを開き、LANGUAGE_LEVELをJDK_1_8または任意のバージョンに変更します。->これで問題が解決しない場合は、プロジェクトのルートディレクトリで「JDK」をgrepし、バージョン設定を含むファイルを見つけて、適切なバージョンに設定する必要があります。



-1

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

  1. JDK 1.8を使用していることを確認してください([ウィンドウ]> [設定]> [インストールされたJREとコンパイラ])。
  2. 新しい機能インターフェースを定義する場合は、アノテーション@FunctionalInterfaceを使用して、Eclipseがラムダ(機能インターフェース)に関連するリファクタリングを提案するようにします。

-1

最初に、使用しているJDKのバージョンを確認してください。バージョンは1.8より高いはずです。

その場合は、以下の手順を実行してください。

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

事業

1.File-> Project Structure-> Project-> Project言語レベルを8に変更して、ランバ式が機能するようにします。

2.File-> Project Structure-> Module-> Project言語レベルを8に変更して、ランバ式が機能するようにします。


-1

これは、新しい更新されたintelliJでは機能しない...新しいintelliJでは機能しない

->ファイル->プロジェクト構造->グローバルライブラリに移動します==> JDK 1.8以降のバージョンに設定します。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.