Java "이 언어 레벨에서 지원되지 않는 람다 표현식"


198

Java 8의 새로운 기능을 테스트하고 여기에 표시된 것처럼 예제를 내 IDE (Eclipse, 원래 IntelliJ)에 복사했습니다 .

Eclipse는 람다 식에 대한 지원을 제공하지 않았으며 IntelliJ는 계속 오류를보고했습니다.

이 언어 레벨에서 지원되지 않는 Lambda 표현식

이것이 설치, 코드 또는 지원에 문제가 있는지 알고 싶습니다.


3
IDE 문제입니다. 컴파일러 준수를 변경해야합니다.
— Sotirios Delimanolis

6
IDEA에서 파일-> 프로젝트 구조를 선택하십시오. 언어 레벨을 변경하는 옵션이 있습니다
— fge

1
@Czipperz : "Solved"로 제목에 주석을 달지 말고 체크 표시를 클릭하여 최상의 답변을 "Accepted"로 표시하십시오. 응답자에게 보상을 제공하고 질문에 문제를 해결하는 답변이 있음을 보여줍니다. 답변이 올바로 해결되지 않으면 자체 답변을 게시 한 후 대기 시간이 지난 후 수락 된 것으로 표시하십시오.
— Lawrence Dol


@LawrenceDol 나는 답변으로 게시하지 않았기 때문에 주석으로 주석을 달았습니다.
— Czipperz

답변:


344

IntelliJ IDEA에서 :

에서 File Menu→ Project Structure→ Project변경 Project Language Level에8.0 - Lambdas, type annotations etc.

안드로이드 3.0 이상 이동에 대한 File→ Project Structure→ Module→ app와에서 속성 탭 세트 Source Compatibility및 Target Compatibility로1.8 (Java 8)

스크린 샷 :

여기에 이미지 설명을 입력하십시오


69
제안 된 편집 참고 사항 : 모든 모듈에 대해 언어 수준을 구성 할 수도 File Menu → Project Structure → Modules있지만 기본적으로 프로젝트 언어 수준과 동일합니다.
— user1516873 16:14에

6
Android Studio에서 동일한 문제에 직면하고 있으며 위에서 언급 한 IDE에서 동일한 설정을 찾지 못했습니다. 어떠한 제안 !
— CoDe

18
@Shubh : Gradle에서 다음 행을 추가하면 코드가 작동합니다. android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
— BaDo

6
후 업그레이드 에 인 IntelliJ (15) , I는 변경했다 프로젝트 언어 수준을 다시 8이 취할 효과 9까지합니다.
— averasko

17
이 답변은 구식입니다. 안드로이드 3.1.2 이동 File> - Project Structure-> Module you want to support lambdas설정하고 소스 호환성 및 대상 호환성 에 1.8
— 이반

98

소스 탭 (모듈 부분)에서도 소스 코드 언어 레벨을 변경해야합니다.

언어 수준 변경


3
귀하의 답변이 높거나 다른 답변과 함께 있어야합니다
— muni764

2
+1. 모듈의 우선 순위가 프로젝트의 우선 순위보다 높습니다. 따라서 모듈 부분의 언어 수준을 설정하는 것을 선호합니다.
— Ge Liu

여기에는 IntelliJ에 필요한 모듈이 포함되어 있지 않습니다. IntelliJ 의이 측면에 대해 열중하지는 않습니다. 동일한 것을 확인하기에는 너무 많은 곳입니다.
— SpacePrez

대박. 정말 고맙습니다. 이것은 나의 하루를 구했다. 람다 식을 활성화하기 위해 수행해야 할 작업이 확실하지 않은 오류로 어려움을 겪고있었습니다.
— Siddhartha Thota

스프링 부트 AP를 실행 중이며 람다 식 사용을 시작한 후 무엇이 잘못되었는지 확실하지 않고 프로젝트 설정을 변경했지만이 모듈 설정을 따른 후 제대로 작동했습니다.
— Siddhartha Thota

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

2
pom.xml 파일에 대한 부분은 정말 도움이됩니다. 감사합니다!
— Kevin Zhao

3
모듈의 언어 수준을 변경 한 후에도 문제가 해결되었습니다.
— nihasmata

23

Android Studio Canary Build (3. +)에서 다음을 수행 할 수 있습니다.

파일-> 프로젝트 구조-> 모듈 섹션에서 클래스의 모듈 이름이 있습니다. Java를 1.8 버전으로 업그레이드하려는 모듈을 클릭하십시오. -> "소스 호환성"및 "대상 호환성"을 1.7 이하에서 1.8로 변경하십시오. 다른 것을 바꾸지 마십시오. -> 적용을 클릭하십시오

이제 gradle이 다시 동기화되고 오류가 제거됩니다.


18

compileOptionsbuild.gradle yours 앱을 추가 하십시오.

android {


...

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

2
구글은 몇 주 전에 잭을 폐기한다고 발표했다. Java 8 언어 기능 지원은 이제 Android Studio 2.4 Preview 4부터 Android Gradle 플러그인에서 기본적으로 제공됩니다. 여기
— nilsi

9

Android Studio 3.0.1 이상을 사용하는 최신 사용자의 경우 Alt + Enter를 클릭하고 언어 수준을 8.0-Lambdas, 입력 주석 등으로 ​​업그레이드하십시오.


다른 사람보다 쉽고 나은
— Abhishek Singh

6

Language 5에서 지원되지 않는 경우 다음을 확인하십시오. (나를 위해 모듈 섹션에 있음)

Lanaguge Level 5는 지원되지 않습니다


4

7.0은 람다 식을 지원하지 않습니다. 언어 레벨을 8.0으로 변경하려면 이것을 앱 gradle에 추가하십시오.

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

여기에 이미지 설명을 입력하십시오


2

실제로, Java 8에 대한 Eclipse 지원이 사용 가능합니다 ( here 및 here 참조) .

  • Kepler의 경우 SR2에 대한 "기능 패치"로 제공됩니다 (예 : Eclipse 4.3.2).
  • Luna (Eclipse 4.4)의 경우 표준 릴리스에 있습니다. ( 출시 일정 )

2

IntelliJ IDEA 15에서 Java 8 (람다 등)으로 컴파일하려면

  • CTRL + ALT + SHIFT + S 또는 파일 / 프로젝트 구조

  • 프로젝트 탭 열기

  • 호환 가능한 Java 버전 (1.8)으로 Project SDK 설정

  • 프로젝트 언어 레벨을 8로 설정

  • 모듈 열기 탭

  • 언어 수준을 8로 설정하고 확인을 클릭하십시오.

  • CTRL + ALT + S 또는 파일 / 설정

  • 빌드, 실행, 배포 / 컴파일러 / Java 컴파일러

  • 대상 바이트 코드 버전을 1.8로 변경하고 확인을 클릭하십시오.


2

사용 : IntelliJ IDEA 2017.1.4 빌드 # IU-171.4694.23

프로젝트 설정 / 프로젝트 탭을 통해 언어 수준을 변경해도 아무런 효과가 없습니다. 대신 Alt+를 Enter누르고 "언어 레벨을 8로 설정-Lambdas, 타입 주석 등"을 선택하십시오. 자동으로 해결되었습니다.


1

Stephen C가 지적한 것처럼 Eclipse Kepler (4.3)는 패치가 설치 될 때 Java 8을 지원합니다 (설치 지침은 여기 ).

설치 한 후에는 프로젝트에 java 8을 사용하도록 지시해야합니다. 먼저 일식에 JDK를 추가하십시오.

  • 창-> 환경 설정으로 이동하십시오.
  • Java-> 설치된 JRE로 이동하십시오.
  • 표준 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.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') 온 잘 작동 새로운 고속 Windows 시스템 및 밑줄 Java 8상의 붉은 색으로 물건을 오래된 우분투 18.04 노트북 (그러나 프로젝트가 우분투에 오류없이 컴파일).

빨간색으로 밑줄을 그리지 않도록 강제로 변경 한 유일한 것은 제외 incremental true하고dexOptions

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

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

의 app수준 - build.gradle.



0

Eclipse뿐만 아니라 IntelliJ에 위에서 정의한 프로젝트 특정 설정을 적용한 후에도 여전히 실패했습니다!

나를 위해 일한 것은 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. File> Settings> Build, Execution, Deployment> Compiler에서 Java Compiler로 이동하여 프로젝트 바이트 코드 버전 과 모듈의 모든 대상 바이트 코드 버전 을 1.8로 설정하십시오 . 적용을 클릭 하고 확인을 누르 십시오 . IntelliJ IDE를 다시 시작하십시오. 이 시점에서 내 IDE에서 람다식이 허용되었습니다.

최고의 소원 :)


2
이것은 거의 3 년 전이었습니다.
— Czipperz

이것은 Google을 사용하는 사람들이 이미 해결 된 문제를 확인하기위한 것입니다. 업계에서 일하는 사람들은 이것을 알고 있습니다.
— kuzevni

0

나에게 제공된 솔루션 중 아무것도 작동하지 않았습니다.

이것이 최후의 수단이어야합니다.-> 프로젝트의 .iml 파일 열기 LANGUAGE_LEVEL을 JDK_1_8 또는 원하는 버전으로 변경하십시오. -> 그래도 도움이되지 않으면 프로젝트 루트 디렉토리에서 "JDK"를 grep하고 버전 설정이 포함 된 파일을 찾아서 원하는 버전으로 설정해야합니다.



-1

람다 식에 대한 Ecplise를 지원하려면 다음을 수행하십시오.

  1. JDK 1.8 (윈도우> 환경 설정> 설치된 JRE 및 컴파일러)을 사용 중인지 확인하십시오.
  2. Eclipse에서 Lambdas ( Functional Interfaces ) 와 관련된 리팩토링을 제안하도록 새 기능 인터페이스를 정의하는 경우 주석 @FunctionalInterface를 사용하십시오 .

-1

먼저 사용중인 JDK 버전을 확인하십시오. 1.8보다 높아야합니다.

그렇다면 아래 단계를 수행하십시오.

Intellij 에서 프로젝트 및 모듈의 언어 레벨을 변경하십시오 .

계획

1. 파일-> 프로젝트 구조-> 프로젝트-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.

2. 파일-> 프로젝트 구조-> 모듈-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.


-1

이것은 새로운 업데이트 된 intelliJ에서 작동하지 않습니다 ... 새로운 intelliJ에서 작동하지 않습니다.

-> 파일-> 프로젝트 구조-> 글로벌 라이브러리 ==>로 이동하여 JDK 1.8 이상 버전으로 설정하십시오.

또한 파일-> 프로젝트 구조 ---> 프로젝트 ===> "프로젝트 언어 매뉴얼"을 8로 설정

또한 파일-> 프로젝트 구조 ---> 프로젝트 SDK ==> 1.8

이를 통해 프로젝트에 람다 식을 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.