Java“ นิพจน์แลมบ์ดาไม่รองรับในระดับภาษานี้”


200

ฉันกำลังทดสอบคุณสมบัติใหม่ของ Java 8 และคัดลอกตัวอย่างลงใน IDE ของฉัน (Eclipse เดิมแล้ว IntelliJ) ดังที่แสดงที่นี่

Eclipse ไม่ให้การสนับสนุนใด ๆ สำหรับการแสดงออกแลมบ์ดาและ IntelliJ ยังคงรายงานข้อผิดพลาด

นิพจน์แลมบ์ดาไม่รองรับในระดับภาษานี้

ฉันต้องการทราบว่านี่เป็นปัญหากับการติดตั้งรหัสหรือการสนับสนุนของฉันหรือไม่


3
มันเป็นปัญหาของ IDE คุณต้องเปลี่ยนการปฏิบัติตามคอมไพเลอร์ของคุณ
Sotirios Delimanolis

6
ใน IDEA ให้เลือกไฟล์ -> โครงสร้างโครงการ คุณจะมีตัวเลือกในการเปลี่ยนระดับภาษา
FGE

1
@Czipperz: บนดังนั้นอย่าใส่คำอธิบายประกอบด้วย "Solved" ให้ทำเครื่องหมายคำตอบที่ดีที่สุดว่า "ยอมรับแล้ว" โดยคลิกที่เครื่องหมายถูก ที่ให้รางวัลแก่ผู้ตอบและแสดงคำถามนั้นมีคำตอบที่ช่วยแก้ปัญหา หากไม่มีคำตอบให้ความละเอียดที่ถูกต้องคุณมีอิสระที่จะโพสต์คำตอบด้วยตนเองแล้วทำเครื่องหมายคำตอบนั้น (หลังจากช่วงเวลาที่รอคอย)
Lawrence Dol


@LawrenceDol ฉันอธิบายว่ามันเป็นอย่างนั้นเพราะพวกเขาไม่ได้โพสต์มันเป็นคำตอบ แต่เป็นความคิดเห็น
Czipperz

คำตอบ:


349

ใน IntelliJ IDEA:

ในFile Menu→การProject Structure→การProjectเปลี่ยนแปลงProject Language Levelไป8.0 - Lambdas, type annotations etc.

สำหรับ Android 3.0 ขึ้นไปFile→การProject Structure→การModule→การappและในคุณสมบัติของแท็บชุดSource CompatibilityและTarget Compatibilityจะ1.8 (Java 8)

ภาพหน้าจอ:

ป้อนคำอธิบายรูปภาพที่นี่


69
หมายเหตุจากการแก้ไขที่เสนอ : คุณยังสามารถกำหนดระดับภาษาสำหรับทุกโมดูลได้File Menu → Project Structure → Modulesแต่โดยค่าเริ่มต้นมันจะเหมือนกับระดับภาษาของโครงการ
user1516873

6
ฉันกำลังประสบปัญหาเดียวกันสำหรับ Android Studio และไม่พบการตั้งค่าเดียวกันใน IDE ที่คุณกล่าวถึงข้างต้น ข้อเสนอแนะใด ๆ !
รหัส

18
@Shubh: ใน Gradle เพิ่มบรรทัดเหล่านี้โค้ดของคุณจะทำงาน: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
หลังจากอัปเกรดเป็นIntelliJ 15ฉันต้องเปลี่ยนระดับภาษาของโครงการเป็น 9 และจากนั้นกลับเป็น 8 เพื่อให้มีผล
averasko

17
คำตอบนี้ล้าสมัยแล้ว บน Android 3.1.2 ไปที่File-> Project Structure-> Module you want to support lambdasและตั้งค่าความเข้ากันได้ของแหล่งข้อมูลและความเข้ากันได้ของเป้าหมายเป็น1.8
Ivan

100

คุณควรเปลี่ยนซอร์สโค้ดระดับภาษาด้วยในแท็บซอร์ส (ส่วนโมดูล)

เปลี่ยนระดับภาษา


3
คำตอบของคุณควรสูงกว่าหรือพร้อมกับคำตอบอื่น ๆ
muni764

2
+1 ลำดับความสำคัญของโมดูลสูงกว่าของโครงการ ดังนั้นฉันชอบตั้งค่าระดับภาษาของส่วนโมดูล
Ge Liu

ไม่รวมถึงโมดูลที่ IntelliJ ต้องการ ไม่คลั่งไคล้ในด้านนี้ของ IntelliJ มีสถานที่มากมายให้ตรวจสอบสิ่งเดียวกัน
SpacePrez

น่ากลัว ขอบคุณมาก. สิ่งนี้ช่วยชีวิตฉันไว้ ฉันดิ้นรนกับข้อผิดพลาดไม่แน่ใจว่าต้องทำอะไรเพื่อเปิดใช้งานการแสดงแลมบ์ดา
Siddhartha Thota

ฉันกำลังเรียกใช้ boot boot ap และไม่แน่ใจว่าเกิดข้อผิดพลาดอะไรหลังจากที่ฉันเริ่มใช้แลมบ์ดานิพจน์ฉันเปลี่ยนการตั้งค่าโครงการ แต่หลังจากติดตามการตั้งค่าโมดูลนี้ทำงานได้ดี
Siddhartha Thota

76

วิธีนี้ใช้ได้กับ 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
  }
}

43

สำหรับ Intellij 13 เพียงเปลี่ยนระดับภาษาของโครงการเป็น8.0การนำทางต่อไปนี้

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

java8

ระดับ lang โมดูล

ฉันยังมีการอัปเดตเมื่อไม่มีปลั๊กอินสำหรับผู้เชี่ยวชาญModules lang leveljava compiler

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

โมดูลระดับ lang

แต่สิ่งนี้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

2
ส่วนเกี่ยวกับไฟล์ pom.xml นั้นมีประโยชน์จริงๆขอบคุณ!
เควิน Zhao

3
หลังจากเปลี่ยนระดับภาษาสำหรับโมดูลยังแก้ไขปัญหาของฉัน
nihasmata

24

ใน Android studio canary build (3. +) คุณสามารถทำสิ่งต่อไปนี้:

ไฟล์ -> โครงสร้างโครงการ -> ดูในส่วนโมดูลมีชื่อของโมดูลในชั้นเรียนของคุณ คลิกที่โมดูลที่คุณต้องการอัพเกรดจาวาเป็น 1.8 เวอร์ชั่น -> เปลี่ยน "ความเข้ากันได้ของแหล่งที่มา" และ "ความเข้ากันได้ของเป้าหมาย" เป็น 1.8 จาก 1.7 หรือต่ำกว่า อย่าเปลี่ยนสิ่งอื่นใด -> คลิกใช้

ตอนนี้ gradle จะซิงค์อีกครั้งและข้อผิดพลาดของคุณจะถูกลบ


19

เพียงเพิ่มcompileOptionsbuild.gradle แอปของคุณ:

android {


...

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

2
Google ประกาศว่าพวกเขาเลิกใช้แจ็คเมื่อสองสามสัปดาห์ก่อน รองรับคุณสมบัติภาษา Java 8 ในขณะนี้มีให้โดยปลั๊กอิน Android Gradle เริ่มต้นด้วย Android Studio 2.4 ดูตัวอย่าง 4 ดูที่นี่
nilsi

10

สำหรับผู้ใช้ล่าสุดที่ใช้ Android studio 3.0.1 ขึ้นไป เพียงคลิก Alt + Enter และอัปเกรดระดับภาษาของคุณเป็น 8.0 - Lambdas พิมพ์คำอธิบายประกอบ ฯลฯ


ง่ายและดีกว่าคนอื่น ๆ
Abhishek Singh

7

หากคุณไม่ได้รับการสนับสนุนที่ Language 5ให้ตรวจสอบสิ่งนี้: (สำหรับฉันมันอยู่ในส่วนModules )

ไม่รองรับ Lanaguge ระดับ 5


5

7.0 ไม่สนับสนุนการแสดงออกแลมบ์ดา เพียงเพิ่มสิ่งนี้ลงในแอปพลิเคชันของคุณเพื่อเปลี่ยนระดับภาษาเป็น 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

ป้อนคำอธิบายรูปภาพที่นี่


2

อันที่จริงการสนับสนุน Eclipse สำหรับ Java 8 สามารถใช้ได้: ดูที่นี่และที่นี่

  • สำหรับเคปเลอร์มีให้ในรูปแบบ "แพทช์คุณลักษณะ" เทียบกับ SR2 (เช่น Eclipse 4.3.2)
  • สำหรับ Luna (Eclipse 4.4) จะอยู่ในรุ่นมาตรฐาน ( กำหนดการวางจำหน่าย )

2

เพื่อรวบรวมกับ Java 8 (lambdas และอื่น ๆ ) ใน IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S หรือโครงสร้างไฟล์ / โครงการ

  • เปิดแท็บโครงการ

  • ตั้ง Project SDK เป็นเวอร์ชั่นจาวาที่เข้ากันได้ (1.8)

  • ตั้งค่าระดับภาษาของโปรเจ็กต์เป็น 8

  • เปิดแท็บโมดูล

  • ตั้งค่าระดับภาษาเป็น 8 คลิกตกลง

  • CTRL + ALT + S หรือไฟล์ / การตั้งค่า

  • Build, Execution, Deployment / Compiler / Java Compiler

  • เปลี่ยน Target bytecode version เป็น 1.8 คลิก OK


2

การใช้: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

การเปลี่ยนระดับภาษาผ่านแท็บการตั้งค่าโครงการ / โครงการไม่ได้ทำอะไรเลย กดปุ่มแทนAlt + Enterและเลือก "ตั้งค่าระดับภาษาเป็น 8 - Lambdas, พิมพ์คำอธิบายประกอบ ฯลฯ " และจะแก้ไขโดยอัตโนมัติ


1

Stephen C ชี้ให้เห็น Eclipse Kepler (4.3) รองรับ Java 8 เมื่อติดตั้งแพตช์ (คำแนะนำในการติดตั้งที่นี่ )

เมื่อติดตั้งแล้วคุณจะต้องแจ้งโครงการของคุณให้ใช้ java 8 ขั้นแรกเพิ่ม JDK ลงใน eclipse:

  • ไปที่หน้าต่าง -> การตั้งค่า
  • ไปที่ Java -> JREs ที่ติดตั้ง
  • เพิ่ม VM มาตรฐานและชี้ไปที่ตำแหน่งของ JRE
  • จากนั้นไปที่คอมไพเลอร์
  • ตั้งค่าระดับความสอดคล้องของคอมไพเลอร์เป็น 1.8

จากนั้นบอกโครงการให้ใช้ JDK 1.8:

  • ไปที่ Project -> preferences
  • ไปที่ Java Compiler
  • เปิดใช้งานการตั้งค่าเฉพาะโครงการ
  • ตั้งค่าระดับความสอดคล้องของคอมไพเลอร์เป็น 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.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') ทำงานได้ดีบนเครื่อง Windows ใหม่ที่รวดเร็วและขีดเส้นใต้Java 8สิ่งที่ตามสีสีแดงบนเก่า Ubuntu 18.04 แล็ปท็อป ( แต่โครงการรวบรวมไม่มีข้อผิดพลาดบน Ubuntu)

สองสิ่งเดียวที่ฉันเปลี่ยนเพื่อบังคับให้หยุดการขีดเส้นใต้ด้วยสีแดงไม่รวมถึงincremental trueและdexOptions

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

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

ในapp- build.gradleระดับ



0

แม้หลังจากใช้การตั้งค่าเฉพาะโครงการที่กำหนดไว้ข้างต้นบน IntelliJ เช่นเดียวกับ Eclipse ก็ยังคงล้มเหลวสำหรับฉัน!

สิ่งที่ใช้ได้ผลสำหรับฉันคือการเพิ่มปลั๊กอิน maven ด้วยแหล่งที่มาและเป้าหมายด้วยการตั้งค่า 1.8 ใน POM XML:

<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. ไฟล์> โครงสร้างโครงการ> ภายใต้การตั้งค่าโครงการไปที่โครงการ> กำหนดProject SDKเป็น 1.8 (ด้วยเวอร์ชัน 65 หรือสูงกว่าล่าสุดคือ 112) และตั้งค่าระดับภาษาของโครงการเป็น 8

  2. ไฟล์> โครงสร้างโครงการ> ภายใต้การตั้งค่าแพลตฟอร์มไปที่โครงการ> ตรวจสอบให้แน่ใจว่าเส้นทางบ้าน JDKของคุณถูกตั้งค่าเป็น 1.8 (ด้วยเวอร์ชัน 65 หรือสูงกว่าล่าสุดคือ 112)

หากข้อมูลด้านบนใช้งานไม่ได้ให้ตรวจสอบคอมไพเลอร์เวอร์ชั่น bytecodeของคุณและไปยังสาเหตุที่เป็นไปได้ # 2

สาเหตุที่เป็นไปได้ # 2: คอมไพเลอร์

  1. ไฟล์> การตั้งค่า> สร้างการดำเนินการปรับใช้> ภายใต้คอมไพเลอร์ไปที่คอมไพเลอร์ Java> ตั้งค่าของคุณ Project Bytecode Versionเป็น 1.8 รวมถึงTarget Bytecode Version ทั้งหมดสำหรับโมดูลของคุณ คลิกสมัครและตีตกลง รีสตาร์ท IntelliJ IDE ของคุณ ตอนนี้การแสดงออกของแลมบ์ดายอมรับใน IDE ของฉันแล้ว

ด้วยความปรารถนาดี :)


2
เกือบสามปีที่แล้ว
Czipperz

นี่สำหรับคนที่ใช้ google เพื่อตรวจสอบปัญหาที่แก้ไขแล้ว คนที่ทำงานในอุตสาหกรรมรู้เรื่องนี้
kuzevni

0

สำหรับฉันไม่มีวิธีการแก้ปัญหาให้ทำงาน

นี่ควรเป็นทางเลือกสุดท้ายของคุณ: -> เปิดไฟล์. img ของโครงการของคุณเปลี่ยน LANGUAGE_LEVEL เป็น JDK_1_8 หรือเวอร์ชันที่คุณต้องการ -> หากสิ่งนี้ไม่ได้ผลคุณควร grep "JDK" ในไดเรกทอรีรากโครงการของคุณและค้นหาไฟล์ที่มีการตั้งค่าเวอร์ชันและตั้งเป็นเวอร์ชันที่คุณต้องการ



-1

หากต้องการได้รับการสนับสนุนจาก Ecplise สำหรับการแสดงออกแลมบ์ดา:

  1. ตรวจสอบให้แน่ใจว่าคุณใช้ JDK 1.8 (หน้าต่าง> การกำหนดค่าตามความชอบ> JRE ที่ติดตั้งและคอมไพเลอร์);
  2. ใช้หมายเหตุประกอบ @FunctionalInterface หากคุณกำหนดอินเตอร์เฟสการทำงานใหม่ใด ๆ เพื่อให้ eclipse แนะนำให้คุณทำการปรับโครงสร้างที่เกี่ยวข้องกับ Lambdas ( ฟังก์ชั่นอินเทอร์เฟซ )

-1

ตรวจสอบรุ่นของ JDK ที่คุณใช้ก่อนควรสูงกว่า 1.8

หากเป็นเช่นนั้นให้ทำตามขั้นตอนด้านล่าง

เปลี่ยนระดับภาษาของโครงการและโมดูลในIntellij Intellij

โครงการ

1.File-> Project Project-> Project-> ระดับภาษาโปรเจ็กต์เปลี่ยนเป็น 8 เพื่อให้นิพจน์ lamba ทำงาน

2.File-> Project Project-> Module-> ระดับภาษาโปรเจ็กต์เปลี่ยนเป็น 8 เพื่อให้นิพจน์ lamba ทำงาน


-1

คำตอบนี้ไม่ทำงานสำหรับ intelliJ ที่อัปเดตใหม่ ... สำหรับ intelliJ ใหม่

ไปที่ -> file -> โครงสร้างโครงการ -> Global Libraries ==> ตั้งค่าเป็น JDK 1.8 หรือสูงกว่า

ไฟล์ -> โครงสร้างโครงการ ---> โครงการ ===> ตั้ง "คู่มือภาษาโครงการ" เป็น 8

ไฟล์ -> โครงสร้างโครงการ ---> โครงการ sdk ==> 1.8

สิ่งนี้ควรเปิดใช้งานการแสดงออกแลมบ์ดาสำหรับโครงการของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.