Java “bu dil düzeyinde lambda ifadeleri desteklenmiyor”


200

Java 8'in bazı yeni özelliklerini test ediyordum ve örneği burada gösterildiği gibi IDE'ye (ilk başta Eclipse, ardından IntelliJ) kopyaladım

Eclipse lambda ifadeleri için hiçbir destek sunmadı ve IntelliJ bir hata bildirmeye devam etti

Bu dil düzeyinde desteklenmeyen Lambda ifadeleri

Bu yükleme, kod veya destek ile ilgili bir sorun olup olmadığını bilmek istiyorum.


3
Bir IDE sorunu. Derleyici uyumluluğunuzu değiştirmeniz gerekir.
Sotirios Delimanolis

6
IDEA'da Dosya -> Proje yapısı'nı seçin; dil seviyesini değiştirme seçeneğiniz olacak
fge

1
@Czipperz: SO'da başlığa "Çözüldü" ile açıklama eklemeyin, onay işaretine tıklayarak en iyi yanıtları "Kabul edildi" olarak işaretleyin. Bu, yanıtı ödüllendirir ve sorunun sorunu çözen bir cevabı olduğunu gösterir. Hiçbir cevap doğru çözümü vermezse, kendi kendine bir cevap gönderebilir ve daha sonra kabul edilmiş olarak işaretleyebilirsiniz (bir bekleme süresinden sonra).
Lawrence Dol


@LawrenceDol Böyle bir açıklama ekledim çünkü cevap olarak değil yorum olarak yayınladılar.
Czipperz

Yanıtlar:


349

IntelliJ IDEA'da:

In File MenuProject StructureProject, değişime Project Language Levelkarşı8.0 - Lambdas, type annotations etc.

Android 3.0+ Git için FileProject StructureModuleappve In özellikleri sekmesi seti Source Compatibilityve Target Compatibilityhiç1.8 (Java 8)

Ekran görüntüsü:

resim açıklamasını buraya girin


69
Önerilen düzenlemeden not : Her modül için dil seviyesini de yapılandırabilirsiniz File Menu → Project Structure → Modules, ancak varsayılan olarak Proje dil seviyesiyle aynı olacaktır.
user1516873

6
Android Studio için de aynı sorunla karşılaşıyorum ve yukarıda belirttiğiniz IDE'de aynı ayarları bulamadım. Herhangi bir öneri !
CoDe

18
@Shubh: Gradle'da bu satırları ekleyin, kodunuz çalışacaktır: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
Sonra yükseltme için intellij 15 , ben değiştirmek zorunda Proje Dil Seviye sonra tekrar 8'e o efekt için 9'a kadar ve.
averasko

17
Bu cevap eski. Android 3.1.2 halindeyken File> - Project Structure-> Module you want to support lambdasve set Kaynak Uyumluluk ve Hedef Uyumluluk için 1.8
Ivan

100

Kaynak kodu Dil Düzeyi'ni Kaynak sekmesinde de (Modüller bölümü) değiştirmeniz gerekir.

Dil Seviyesini Değiştir


3
cevabınız daha yüksek veya diğer cevaplarla birlikte olmalıdır
muni764

2
+1. Modüllerin önceliği projeden daha yüksektir. Bu yüzden modüllerin dil seviyesini ayarlamayı tercih ediyorum.
Ge Liu

IntelliJ'nin de gerektirdiği modülü içermez. IntelliJ'in bu tarafı için deli değil, aynı şeyi kontrol etmek için çok fazla yer.
SpacePrez

Muhteşem. Çok teşekkür ederim. Bu benim günümü kurtardı. Lambda ifadelerini etkinleştirmek için ne yapılması gerektiğinden emin değilim hatayla mücadele ediyordum.
Siddhartha Thota

Bir yay önyükleme ap çalıştırıyordum ve lambda ifadelerini kullanmaya başladıktan sonra neyin yanlış gittiğinden emin değilim, proje ayarlarını değiştirdim, ancak bu modül ayarlarını izledikten sonra, İyi çalıştı.
Siddhartha Thota

76

Bu çözüm Android Studio 3.0 veya sonraki sürümlerde çalışır.

  1. Dosya> Proje Yapısı> Modüller> uygulama> Özellikler sekmesi

resim açıklamasını buraya girin

Her iki değiştirin Source Compatibilityve Target Compatibilityhiç1.8

  1. Yapılandırma dosyasını düzenle

Ayrıca doğrudan ilgili build.gradle dosyasında da yapılandırabilirsiniz

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

İntellij 13 için , aşağıdaki gezinme ile Proje dil düzeyinin kendisini değiştirin 8.0.

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

java8

Modül dil seviyesi

Ayrıca Modules lang levelhiçbir maven eklentisi olmadığında güncellemek zorunda kaldım java compiler.

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

Modüller lang seviyesi

Ancak bunun için Module lang levelzaten bir varsa otomatik olarak sabitlenir 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>

Değişikliklerden sonra her şey iyi görünüyor


5
@Czipperz: Bu cevapta resim var. Bunu tercih ederim, çünkü aslında belirtilen kabul edilen cevaba zaten bakmıştım, ancak açılır listeyi fark edemedim. Bu cevapta seçeneğin tam yerini vurgulayan resimler var.
ArtOfWarfare

2
pom.xml dosyasıyla ilgili bölüm gerçekten yardımcı oluyor, teşekkürler!
Kevin Zhao

3
Modül için de dil seviyesini değiştirdikten sonra sorunum düzeltildi
nihasmata

24

Android studio canary build'de (3. +) şunları yapabilirsiniz:

Dosya -> Proje Yapısı -> Modüllere Bakın Bölümü, sınıfınızın modüllerinin adları vardır. Java'yı 1.8 sürümüne yükseltmek istediğiniz modüle tıklayın. -> "Kaynak Uyumluluğu" ve "Hedef Uyumluluğu" değerlerini 1,7'den düşük veya 1,8 olarak değiştirin. Başka bir şey değiştirmeyin. -> Uygula'yı tıklayın

şimdi sınıf yeniden senkronize edilecek ve hatanız kaldırılacak.


19

Sadece compileOptionsbuild.gradle yours app ekleyin :

android {


...

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

2
Google, Jack'i birkaç hafta önce reddettiklerini açıkladı. Java 8 dil özellikleri desteği artık Android Gradle eklentisi tarafından yerel olarak Android Studio 2.4 Preview 4 ile başlıyor. Buraya
nilsi

10

Android studio 3.0.1 veya üstünü kullanan son kullanıcılar için. Sadece Alt + Enter tuşlarına basın ve dil seviyenizi 8.0 - Lambdas, ek açıklamalar yazın vb. Seviyesine yükseltin.


kolay ve diğerlerinden daha iyi
Abhishek Singh

7

Eğer alıyorsanız Dil 5 de desteklenmez , bu kontrol edin: (Benim için oldu Modülleri bölümünde)

Dil seviyesi 5 desteklenmez


5

7.0 lambda ifadelerini desteklemez. Dil düzeyinizi 8.0 olarak değiştirmek için bunu uygulama derecenize ekleyin:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

resim açıklamasını buraya girin



2

IntelliJ IDEA 15'te Java 8 (lambdas vb.) İle derlemek için;

  • CTRL + ALT + SHIFT + S veya Dosya / Proje Yapısı

  • Proje sekmesini aç

  • Project SDK'sını uyumlu java sürümüne ayarlayın (1.8)

  • Proje dil seviyesini 8 olarak ayarlayın

  • Modüller sekmesini aç

  • Dil seviyesini 8 olarak ayarlayın, Tamam'a tıklayın

  • CTRL + ALT + S veya Dosya / Ayarlar

  • Derleme, Yürütme, Dağıtım / Derleyici / Java Derleyici

  • Hedef bayt kodu sürümünü 1.8 olarak değiştirin, Tamam'ı tıklayın


2

Kullanma: IntelliJ IDEA 2017.1.4 Derleme # IU-171.4694.23

Proje ayarlarını / Proje sekmesini kullanarak dil düzeyini değiştirmek hiçbir şey yapmadı. Bunun yerine Alt+ Enterdüğmesine basmak ve "Dil seviyesini 8 - Lambdas, ek açıklamalar vb. Olarak ayarlayın" seçeneğini belirleyin. ve otomatik olarak çözüldü.


1

Stephen C'nin belirttiği gibi, Eclipse Kepler (4.3) düzeltme eki yüklendiğinde Java 8 desteğine sahiptir ( buradaki kurulum talimatları )

Kurulduktan sonra, projelerinize java 8'i kullanmasını söylemeniz gerekir. Önce tutulması için JDK'yı ekleyin:

  • Pencere -> Tercihler'e gidin
  • Java'ya Git -> Yüklü JRE'ler
  • Standart VM'yi ekleyin ve JRE'nin yerini gösterin
  • Derleyiciye git
  • Derleyici uyumluluk düzeyini 1.8 olarak ayarlayın

Ardından projeye JDK 1.8'i kullanmasını söyleyin:

  • Proje -> tercihlere gidin
  • Java Derleyicisine Git
  • Projeye özgü ayarları etkinleştir
  • Derleyici uyumluluk düzeyini 1.8 olarak ayarlayın

1

Aşağıdaki ayarları kontrol edin:

  1. Dosya-> Proje Yapısı-> Proje Sekmesi.

    *Project SDK should be set to 8 or above.*
  2. Dosya-> Proje Yapısı-> Modüller.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Dosya-> Ayarlar (veya Diğer Ayarlar-> Yeni Fikir sürümündeki yeni projeler için tercih)

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

Sorununuz, yukarıda tanımlanan kategorilerden herhangi birine girebilir.


1

Aynı proje ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') hakkında ceza işleri yeni hızlı Windows makinesinde ve altı çizili Java 8kırmızı renkle şeyler eski Ubuntu 18.04 laptop (ancak proje Ubuntu üzerinde hatasız derleme).

Kırmızı ile altını çizmeye zorlamak için değiştirdiğim iki şey hariç tutuldu incremental truevedexOptions

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

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

içinde appdüzeyinde - build.gradle.



0

Eclipse ve IntelliJ üzerinde yukarıda tanımlanan projeye özgü ayarları uyguladıktan sonra bile, hala benim için başarısız oluyordu!

benim için işe yarayan kaynak ve hedef PAV XML 1.8 ayar ile maven eklentisi eklenmesi oldu:

<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

Olası Neden # 1 (bu sorunun ilk 3 cevabı ile aynı): Proje Yapısı Ayarları

  1. Dosya> Proje Yapısı> Proje Ayarları altında Proje'ye gidin> Proje SDK'sını 1.8'e (65 veya üstü sürümde, en son sürüm 112'dir) ayarlayın ve Proje Dil Seviyesini 8'e ayarlayın.

  2. Dosya> Proje Yapısı> Platform Ayarları altında Proje'ye gidin> JDK giriş yolunuzun 1.8 olarak ayarlandığından emin olun (65 veya üzeri sürümde, en son sürüm 112'dir).

Yukarıdakiler işe yaramazsa, derleyicinizin hedef bayt kodu sürümünü kontrol edin ve Olası Neden # 2'ye geçin.

Olası Neden # 2: Derleyici

  1. Dosya> Ayarlar> Derleme, Yürütme, Dağıtım> Derleyici altında, Java Derleyici'ye gidin> Proje Bayt Kodu Sürümünüzü ve modülleriniz için tüm Hedef Bayt Kodu Sürümünü ayarlayın . Uygula'yı tıklayın ve Tamam'a basın . IntelliJ IDE'nizi yeniden başlatın. Lambda ifadesi bu noktada IDE'mde kabul edildi.

En iyi dileklerimle :)


2
Bu neredeyse üç yıl önceydi.
Czipperz

Bu, google kullanan kişilerin zaten çözülmüş sorunları kontrol etmeleri içindir. Endüstride çalışan insanlar bunu bilir.
kuzevni

0

Benim için sağlanan çözümlerin hiçbiri işe yaramadı.

Bu sizin son çareniz olmalıdır: -> Projenizin .iml dosyasını açın LANGUAGE_LEVEL dosyasını JDK_1_8 veya istediğiniz herhangi bir sürümle değiştirin. -> Bu yardımcı olmadıysa, proje kök dizininizde "JDK" dosyasını grep etmeli ve sürüm ayarını içeren dosyayı bulmalı ve tercih ettiğiniz sürüme ayarlamalısınız.



-1

Lambda ifadeleri için Ecplise desteğine sahip olmak:

  1. JDK 1.8 (Pencere> Tercihler> Yüklü JRE'ler ve Derleyici) kullandığınızdan emin olun;
  2. Tutulmanın Lambdas ( Fonksiyonel Arayüzler .)

-1

Önce kullandığınız JDK sürümünü kontrol edin, 1.8'den yüksek olmalıdır.

Eğer öyleyse, aşağıdaki adımları uygulamaya devam edin.

Intellij'deki Proje ve modüllerin Dil seviyesini değiştirin .

proje

1.Dosya-> Proje Yapısı-> Proje-> Proje dil seviyesi Lamba ifadelerinin çalışması için 8 olarak değiştirin

2.Dosya-> Proje Yapısı-> Modül-> Proje dil seviyesi Lamba ifadelerinin çalışması için 8 olarak değiştirin


-1

bu cevaplar yeni güncellenmiş intelliJ için çalışmıyor ... yeni intelliJ için ..

-> dosya -> Proje Yapısı -> Global Kütüphaneler ==> JDK 1.8 veya daha yüksek bir sürüme ayarlayın.

ayrıca Dosya -> proje Yapısı ---> projeler ===> "proje dil kılavuzu" 8 olarak ayarlayın

ayrıca Dosya -> proje Yapısı ---> proje sdk ==> 1.8

Bu, projeniz için lambda ifadesini etkinleştirmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.