Java “ekspresi lambda tidak didukung pada tingkat bahasa ini”

198

Saya sedang menguji beberapa fitur baru Java 8 dan menyalin contoh ke IDE saya (Eclipse awalnya, lalu IntelliJ) seperti yang ditunjukkan di sini

Eclipse tidak menawarkan dukungan apa pun untuk ekspresi lambda, dan IntelliJ terus melaporkan kesalahan

Ekspresi Lambda tidak didukung pada tingkat bahasa ini

Saya ingin tahu apakah ini masalah dengan pemasangan, kode, atau dukungan saya.

Czipperz
sumber
3
Ini masalah IDE. Anda harus mengubah kepatuhan kompiler Anda.
Sotirios Delimanolis
6
Dalam IDEA, pilih File -> Struktur proyek; Anda akan memiliki opsi untuk mengubah level bahasa
fge
1
@Czipperz: Pada SO jangan membubuhi keterangan judul dengan "Selesaikan", tandai jawaban terbaik sebagai "Diterima" dengan mengklik tanda centang. Itu memberi penghargaan kepada penjawab dan menunjukkan bahwa pertanyaan memiliki jawaban yang menyelesaikan masalah. Jika tidak ada jawaban yang memberikan resolusi yang tepat, Anda bebas memposting jawaban sendiri dan kemudian menandainya diterima (setelah masa tunggu).
Lawrence Dol
@LawrenceDol Saya menjelaskannya seperti itu karena mereka tidak mempostingnya sebagai jawaban, tetapi sebagai komentar.
Czipperz

Jawaban:

345

Dalam IntelliJ IDEA:

Di File MenuProject StructureProject, ubah Project Language Levelke8.0 - Lambdas, type annotations etc.

Untuk Android 3.0+ Go FileProject StructureModuleappdan Di Properties Tab atur Source Compatibilitydan Target Compatibilityke1.8 (Java 8)

Tangkapan layar:

masukkan deskripsi gambar di sini

Abhilash Divakaran
sumber
69
Catatan dari pengeditan yang diusulkan : Anda juga dapat mengonfigurasi tingkat bahasa untuk setiap modul File Menu → Project Structure → Modules, tetapi secara default akan sama dengan tingkat bahasa Proyek.
user1516873
6
Saya menghadapi masalah yang sama untuk Android Studio dan tidak menemukan pengaturan yang sama dalam IDE yang Anda sebutkan di atas. Ada saran !
CoDe
18
@ Syubh: Di Gradle, tambahkan baris ini, kode Anda akan berfungsi: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo
6
Setelah memutakhirkan ke IntelliJ 15 , saya harus mengubah Level Bahasa Proyek hingga 9 dan kemudian kembali ke 8 agar itu berlaku.
averasko
17
Jawaban ini sudah usang. Pada Android 3.1.2 buka File-> Project Structure-> Module you want to support lambdasdan atur Kompatibilitas Sumber dan Kompatibilitas Target menjadi 1.8
Ivan
98

Anda harus mengubah kode sumber Level Bahasa juga pada tab Sumber (bagian Modul).

Ubah Level Bahasa

pengguna2682809
sumber
3
jawaban Anda harus lebih tinggi atau bersama-sama dengan jawaban lain
muni764
2
+1. Prioritas modul lebih tinggi daripada proyek. Jadi saya lebih suka mengatur tingkat bahasa bagian modul.
Ge Liu
Ini tidak termasuk modul yang juga dibutuhkan IntelliJ. Tidak tergila-gila pada sisi IntelliJ ini, terlalu banyak tempat untuk memeriksa hal yang sama.
SpacePrez
Luar biasa. Terima kasih banyak. Ini menyelamatkan hari saya. Saya berjuang dengan kesalahan tidak yakin apa yang perlu dilakukan untuk mengaktifkan ekspresi lambda.
Siddhartha Thota
Saya menjalankan ap boot spring, dan tidak yakin apa yang salah setelah saya mulai menggunakan ekspresi lambda, saya mengubah pengaturan proyek, tetapi setelah mengikuti pengaturan modul ini, itu bekerja dengan baik.
Siddhartha Thota
75

Solusi ini berfungsi di Android Studio 3.0 atau yang lebih baru.

  1. File> Struktur Proyek> Modul> aplikasi> tab Properti

masukkan deskripsi gambar di sini

Ubah keduanya menjadi Source CompatibilitydanTarget Compatibility1.8

  1. Edit file konfigurasi

Anda juga dapat mengkonfigurasinya secara langsung di file build.gradle yang sesuai

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
  }
}
Alen Lee
sumber
42

Untuk intellij 13, Cukup ubah sendiri tingkat bahasa Proyek8.0 dengan mengikuti navigasi.

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

java8

Modul tingkat lang

Saya juga harus memperbarui Modules lang levelketika tidak ada plugin pakar untuk java compiler.

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

Modul tingkat lang

Tapi ini Module lang levelakan secara otomatis diperbaiki jika sudah ada maven pluginuntuk itu,

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

Setelah perubahan semuanya terlihat baik

prayagupd
sumber
5
@ Czipperz: Jawaban ini memiliki gambar. Saya lebih suka, karena saya sebenarnya sudah melihat tempat jawaban yang diterima tetapi gagal untuk melihat dropdown. Jawaban ini memiliki gambar yang menyoroti tempat yang tepat di mana pilihan itu berada.
ArtOfWarfare
2
bagian tentang file pom.xml sangat membantu, terima kasih!
Kevin Zhao
3
Setelah mengubah tingkat bahasa juga untuk modul memperbaiki masalah saya
nihasmata
23

Di Android studio canary build (3. +), Anda dapat melakukan hal berikut:

File -> Struktur Proyek -> Lihat di Bagian Modul, ada nama-nama modul kelas Anda. Klik pada modul di mana Anda ingin meningkatkan versi java ke 1.8. -> Ubah "Kompatibilitas Sumber" dan "Kompatibilitas Target" menjadi 1,8 dari 1,7 atau lebih rendah. Jangan mengubah apa pun. -> Klik Terapkan

sekarang gradle akan disinkronkan kembali dan kesalahan Anda akan dihapus.

Tarun
sumber
18

Cukup tambahkan compileOptionsaplikasi build.gradle milik Anda:

android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
Morozov
sumber
2
Google mengumumkan bahwa mereka mencela Jack beberapa minggu yang lalu. Dukungan fitur Java 8 language sekarang disediakan secara native oleh plugin Android Gradle, dimulai dengan Android Studio 2.4 Pratinjau 4. Lihat di sini
nilsi
9

Untuk pengguna terbaru yang menggunakan Android studio 3.0.1 atau lebih tinggi. Cukup klik Alt + Enter dan tingkatkan tingkat bahasa Anda menjadi 8,0 - Lambdas, ketik anotasi, dll.

Vivek
sumber
mudah dan lebih baik daripada yang lain
Abhishek Singh
6

Jika Anda mendapatkan Tidak didukung di Bahasa 5 , periksa ini: (Bagi saya itu ada di bagian Modul )

Lanaguge Level 5 tidak didukung

Kejsi Struga
sumber
5

7.0 tidak mendukung ekspresi lambda. Cukup tambahkan ini ke aplikasi gradle Anda untuk mengubah level bahasa Anda menjadi 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

masukkan deskripsi gambar di sini

cinta hidup
sumber
2

Sebenarnya, dukungan Eclipse untuk Java 8 tersedia: lihat di sini dan di sini .

  • Untuk Kepler, ini tersedia sebagai "patch fitur" terhadap SR2 (yaitu Eclipse 4.3.2)
  • Untuk Luna (Eclipse 4.4) akan ada dalam rilis standar. ( jadwal rilis )
Stephen C
sumber
2

Untuk mengkompilasi dengan Java 8 (lambdas dll) di IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S atau Struktur File / Proyek

  • Buka tab Project

  • Atur Project SDK ke versi java yang kompatibel (1.8)

  • Atur level bahasa Proyek ke 8

  • Buka tab Modul

  • Setel Level bahasa ke 8, klik OK

  • CTRL + ALT + S atau File / Pengaturan

  • Build, Execution, Deployment / Compiler / Java Compiler

  • Ubah Target bytecode versi ke 1.8, klik OK

Daniel de Zwaan
sumber
2

Menggunakan: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

Mengubah level bahasa melalui Pengaturan Proyek / tab Project tidak melakukan apa-apa. Alih-alih memukul Alt+ Enterdan memilih "Atur level bahasa ke 8 - Lambdas, ketikkan anotasi, dll." dan itu diselesaikan secara otomatis.

Patrick Schaefer
sumber
1

Seperti yang ditunjukkan Stephen C, Eclipse Kepler (4.3) memiliki dukungan Java 8 ketika patch diinstal (instruksi instalasi di sini )

Setelah terinstal, Anda harus memberi tahu proyek Anda untuk menggunakan java 8. Pertama tambahkan JDK ke gerhana:

  • Pergi ke Jendela -> Preferensi
  • Pergi ke Jawa -> JRE Terpasang
  • Tambahkan VM Standar, dan arahkan ke lokasi JRE
  • Lalu pergi ke Compiler
  • Setel tingkat kepatuhan Kompiler ke 1.8

Kemudian beri tahu proyek untuk menggunakan JDK 1.8:

  • Buka Proyek -> preferensi
  • Pergi ke Java Compiler
  • Aktifkan pengaturan spesifik proyek
  • Setel tingkat kepatuhan Kompiler ke 1.8
Gijs Overvliet
sumber
1

Periksa pengaturan di bawah ini:

  1. File-> Struktur Proyek-> Tab Proyek.

    *Project SDK should be set to 8 or above.*
  2. File-> Struktur Proyek-> Modul.

    *Check that your or all modules has Language level set to 8 or above.*
  3. File-> Pengaturan (atau Pengaturan Lainnya-> Preferensi untuk proyek baru dalam versi Ide yang lebih baru)

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

Masalah Anda mungkin termasuk dalam salah satu kategori yang ditentukan di atas.

Nitesh Kumar Thakur
sumber
1

Proyek yang sama ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') bekerja dengan baik pada mesin Windows cepat baru dan garis bawah Java 8barang-barang dengan warna merah pada lama Ubuntu 18.04 laptop (namun proyek kompilasi tanpa kesalahan pada Ubuntu).

Hanya dua hal yang saya ubah agar berhenti bergarisbawahi dengan merah tidak termasuk incremental truedandexOptions

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

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

di app- tingkat build.gradle.

tidak hadir
sumber
0

Di intellij 14, pengaturan berikut bekerja untuk saya. Pengaturan Intellij14

pengguna5760784
sumber
0

Bahkan setelah menerapkan pengaturan spesifik proyek yang ditentukan di atas pada IntelliJ dan Eclipse, itu masih gagal bagi saya!

Apa yang berhasil bagi saya adalah penambahan plugin pakar dengan sumber dan target dengan pengaturan 1,8 di 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> 
Dean Jain
sumber
0

Kemungkinan Penyebab # 1 (sama dengan 3 jawaban pertama untuk pertanyaan ini): Pengaturan Struktur Proyek

  1. File> Struktur Proyek> Di bawah Pengaturan Proyek, buka Proyek> atur Project SDK ke 1.8 (dengan versi 65 atau lebih tinggi, terbaru adalah 112) dan atur Level Bahasa Proyek ke 8.

  2. File> Struktur Proyek> Di Bawah Pengaturan Platform, buka Proyek> memastikan bahwa jalur beranda JDK Anda diatur ke 1.8 (dengan versi 65 atau lebih, yang terbaru 112).

Jika hal di atas tidak berhasil, periksa versi bytecode target dari kompiler Anda dan beralih ke Kemungkinan Penyebab # 2.

Kemungkinan Penyebab # 2: Compiler

  1. File> Pengaturan> Bangun, Eksekusi, Penempatan> Di bawah Kompiler, buka Java Compiler> atur Project Bytecode Version Anda menjadi 1,8, serta semua Versi Bytecode Target untuk modul Anda. Klik Terapkan dan tekan OK . Mulai ulang IDE IntelliJ Anda. Ekspresi Lambda diterima di IDE saya pada saat ini.

Semoga sukses :)

kuzevni
sumber
2
Ini hampir tiga tahun lalu.
Czipperz
Ini untuk orang yang menggunakan google untuk memeriksa masalah yang sudah diselesaikan. Orang yang bekerja di industri tahu ini.
kuzevni
0

Bagi saya tidak ada solusi yang disediakan bekerja.

Ini harus menjadi pilihan terakhir Anda: -> Buka file .iml proyek Anda, ubah LANGUAGE_LEVEL menjadi JDK_1_8 atau versi apa pun yang Anda inginkan. -> Jika ini tidak membantu, Anda harus grep "JDK" di direktori root proyek Anda dan menemukan file yang berisi pengaturan versi dan mengaturnya ke versi pilihan Anda.

Pruthvidhar Rao Nadunooru
sumber
-1

Ctrl + Alt + Shift + S dan kemudian dari proyek pilih tingkat bahasa 1.8, baca lebih lanjut tentang Ekspresi Lambda di sini

Toseef Zafar
sumber
-1

Untuk mendapatkan dukungan dari Ecplise untuk ekspresi lambda:

  1. Pastikan Anda menggunakan JDK 1.8 (Window> Preferences> Installed JREs and Compiler);
  2. Gunakan penjelasan @FunctionalInterface jika Anda mendefinisikan antarmuka fungsional baru sehingga gerhana akan menyarankan Anda refactorings terkait dengan Lambdas ( Functional Interfaces .)
Mehdi
sumber
-1

Pertama periksa versi JDK yang Anda gunakan, itu harus lebih tinggi dari 1,8.

Jika sudah maka lanjutkan untuk melakukan langkah-langkah di bawah ini.

Ubah tingkat Bahasa Proyek dan modul di Intellij .

Proyek

1.File-> Struktur Proyek-> Proyek-> tingkat bahasa Proyek Ubah ke 8 agar ekspresi lamba berfungsi

2. File -> Struktur Proyek-> Modul-> tingkat bahasa proyek Ubah ke 8 agar ekspresi lamba berfungsi

Abhishek Tiwari
sumber
-1

jawaban ini tidak berfungsi untuk intelliJ baru yang diperbarui ... untuk intelliJ baru ..

Pergi ke -> file -> Struktur Proyek -> Perpustakaan Global ==> atur ke JDK 1.8 atau versi yang lebih tinggi.

juga File -> Struktur proyek ---> proyek ===> set "manual bahasa proyek" ke 8

juga File -> Struktur proyek ---> project SDK ==> 1.8

Ini harus mengaktifkan ekspresi lambda untuk proyek Anda.

Abhijit
sumber