簡體   English   中英

Java“此語言級別不支持 lambda 表達式”

[英]Java “lambda expressions not supported at this language level”

我的Java 8的一些新功能和復制的例子測試伸到我的IDE(Eclipse的原話的IntelliJ)如圖所示這里

Eclipse 不提供對 lambda 表達式的任何支持,並且 IntelliJ 不斷報告錯誤

此語言級別不支持 Lambda 表達式

我想知道這是否是我的安裝、代碼或支持方面的問題。

在 IntelliJ IDEA 中:

File MenuProject StructureProject ,將Project Language Level更改為8.0 - Lambdas, type annotations etc.

對於 Android 3.0+ Go FileProject StructureModuleapp and In Properties Tab set Source Compatibility and Target Compatibility to 1.8 (Java 8)

截屏:

在此處輸入圖片說明

您還應該在源選項卡(模塊部分)上更改源代碼語言級別。

更改語言級別

此解決方案適用於 Android Studio 3.0 或更高版本。

  1. 文件 > 項目結構 > 模塊 > 應用程序 > 屬性選項卡

在此處輸入圖片說明

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
  }
}

對於 Intellij 13,只需使用以下導航將項目語言級別本身更改為8.0

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

java8

模塊語言級別

當沒有用於java compiler maven 插件時,我還必須更新Modules lang level

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

模塊語言級別

但是如果已經有一個maven plugin ,這個Module lang level將自動修復,

    <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>

更改后一切看起來都不錯

在 Android studio canary build(3.+) 中,您可以執行以下操作:

File -> Project Structure -> Look in Modules Section,有你的類的模塊名稱。 單擊要升級 java 到 1.8 版本的模塊。 -> 將“源兼容性”和“目標兼容性”從 1.7 或更低更改為 1.8。 不要更改任何其他內容。 -> 點擊應用

現在 gradle 將重新同步,您的錯誤將被刪除。

只需在 build.gradle 您的應用程序中添加compileOptions

android {


...

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

適用於使用 Android Studio 3.0.1 或更高版本的最新用戶。 只需單擊 Alt + Enter 並將您的語言級別升級到 8.0 - Lambdas、鍵入注釋等。

如果您在 Language 5中獲得Not supported ,請檢查:(對我而言,它在模塊部分)

不支持語言級別 5

7.0 不支持 lambda 表達式。 只需將此添加到您的應用程序 gradle 即可將您的語言級別更改為 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

在此處輸入圖片說明

實際上,Eclipse 對 Java 8 的支持是可用的:請參閱此處此處

  • 對於 Kepler,它可作為針對 SR2(即 Eclipse 4.3.2)的“功能補丁”提供
  • 對於 Luna (Eclipse 4.4),它將在標准版本中。 發布時間表

在 IntelliJ IDEA 15 中使用 Java 8(lambdas 等)進行編譯;

  • CTRL + ALT + SHIFT + S或文件/項目結構

  • 打開項目選項卡

  • 將項目 SDK 設置為兼容的 Java 版本 (1.8)

  • 將項目語言級別設置為 8

  • 打開模塊選項卡

  • 將語言級別設置為 8,單擊“確定”

  • CTRL + ALT + S或文件/設置

  • 構建、執行、部署 / 編譯器 / Java 編譯器

  • 將目標字節碼版本更改為 1.8,單擊確定

使用:IntelliJ IDEA 2017.1.4 Build #IU-171.4694.23

通過項目設置/項目選項卡更改語言級別沒有任何作用。 而不是按 Alt + Enter並選擇“將語言級別設置為 8 - Lambdas,鍵入注釋等”。 並自動解決。

正如 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. 文件->項目結構->項目選項卡。

     *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. 文件->設置(或其他設置->新Idea版本中新項目的首選項)

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

您的問題可能屬於上述定義的任一類別。

同一個項目( Android Studio 3.3.2gradle-4.10.1-all.zipcompileSdkVersion 28buildToolsVersion '28.0.3' )在新的快速 Windows 機器上運行良好,並在舊的 Ubuntu上用紅色強調Java 8東西18.04 筆記本電腦(但是項目在 Ubuntu 上編譯時沒有錯誤)。

我改變的唯一兩件事是強制它停止用紅色下划線,不包括incremental truedexOptions

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

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

appbuild.gradle

在 Intellij 14 中,以下設置對我有用。 Intellij14 設置

即使在 IntelliJ 和 Eclipse 上應用了上面定義的項目特定設置后,它對我來說仍然失敗!

對我有用的是在POM XML中添加帶有源和目標的maven插件,設置為1.8:

<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> 

可能的原因 #1(與此問題的前 3 個答案相同):項目結構設置

  1. 文件>項目結構>在項目設置下,進入項目>將項目SDK設置為1.8(65或以上版本,最新為112)並將項目語言級別設置為8。

  2. 文件 > 項目結構 > 在平台設置下,進入項目 > 確保您的JDK 主路徑設置為 1.8(65 或更高版本,最新為 112)。

如果上述方法不起作用,請檢查編譯器的目標字節碼版本,然后轉到可能的原因 #2。

可能的原因#2:編譯器

  1. 文件 > 設置 > 構建、執行、部署 > 在編譯器下,轉到 Java 編譯器 > 將您的項目字節碼版本以及模塊的所有目標字節碼版本設置為 1.8。 單擊“應用”並單擊“確定” 重新啟動 IntelliJ IDE。 此時我的 IDE 接受了 Lambda 表達式。

最好的祝願 :)

對我來說,提供的解決方案都沒有奏效。

這應該是您最后的手段:-> 打開您項目的 .iml 文件,將 LANGUAGE_LEVEL 更改為 JDK_1_8 或您希望的任何版本。 -> 如果這沒有幫助,您應該在項目根目錄中 grep "JDK" 並找到包含版本設置的文件並將其設置為您的首選版本。

在 Android 項目中的應用程序級 build.gradle 中添加以下行解決了問題。

 compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

Ctrl + Alt + Shift + S 然后從項目中選擇語言級別 1.8, 在此處閱讀有關 Lambda 表達式的更多信息

要支持 Ecplise 的 lambda 表達式:

  1. 確保您使用的是 JDK 1.8(Window > Preferences > Installed JREs and Compiler);
  2. 如果您定義了任何新的函數式接口,請使用注釋 @FunctionalInterface,以便 eclipse 會建議您進行與 Lambdas( 函數式接口)相關的重構。

首先檢查您使用的JDK版本,它應該高於1.8。

如果是,則繼續執行以下步驟。

Intellij 中更改項目和模塊的語言級別。

項目

1.File->Project Structure->Project->Project language level 改成8,lamba表達式才能工作

2.File->Project Structure->Module->Project language level 改成8,lamba表達式才能工作

這個答案不適用於新的更新的智能......對於新的智能......

轉到 --> 文件 --> 項目結構 --> 全局庫 ==> 設置為 JDK 1.8 或更高版本。

還有文件 --> 項目結構 ---> 項目 ===> 將“項目語言手冊”設置為 8

還有文件 --> 項目結構 ---> 項目 sdk ==> 1.8

這應該為您的項目啟用 lambda 表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM