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 MenuProject StructureProject변경 Project Language Level8.0 - Lambdas, type annotations etc.

안드로이드 3.0 이상 이동에 대한 FileProject StructureModuleapp와에서 속성 탭 세트 Source CompatibilityTarget Compatibility1.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 CompatibilityTarget Compatibility1.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 지원이 사용 가능합니다 ( herehere 참조) .

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