Java "이 언어 레벨에서 지원되지 않는 람다 표현식"
Java 8의 새로운 기능을 테스트하고 여기에 표시된대로 예제를 내 IDE (Eclipse, 그 다음 IntelliJ)에 복사했습니다 .
Eclipse는 람다 식에 대한 지원을 제공하지 않았으며 IntelliJ는 계속 오류를보고했습니다.
이 언어 레벨에서 지원되지 않는 Lambda 표현식
이것이 설치, 코드 또는 지원에 문제가 있는지 알고 싶습니다.
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)
스크린 샷 :
소스 탭 (모듈 부분)에서도 소스 코드 언어 레벨을 변경해야합니다.
이 솔루션은 Android Studio 3.0 이상에서 작동합니다.
- 파일> 프로젝트 구조> 모듈> 앱> 속성 탭
모두 변경 Source Compatibility
과 Target Compatibility
에1.8
- 구성 파일 편집
해당 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
}
}
intellij 13의 경우, 다음 탐색으로 프로젝트 언어 레벨 자체를 변경하십시오 8.0
.
File
|
|
---------Project Structure -> Project tab
|
|________Project language level
모듈 언어 수준
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>
변경 후 모든 것이 좋아 보인다
Android Studio Canary Build (3. +)에서 다음을 수행 할 수 있습니다.
파일-> 프로젝트 구조-> 모듈 섹션에서 클래스의 모듈 이름이 있습니다. Java를 1.8 버전으로 업그레이드하려는 모듈을 클릭하십시오. -> "소스 호환성"및 "대상 호환성"을 1.7 이하에서 1.8로 변경하십시오. 다른 것을 바꾸지 마십시오. -> 적용을 클릭하십시오
이제 gradle이 다시 동기화되고 오류가 제거됩니다.
compileOptions
build.gradle yours 앱을 추가 하십시오.
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Android Studio 3.0.1 이상을 사용하는 최신 사용자의 경우 Alt + Enter를 클릭하고 언어 수준을 8.0-Lambdas, 입력 주석 등으로 업그레이드하십시오.
Language 5에서 지원되지 않는 경우 다음을 확인하십시오. (나를 위해 모듈 섹션에 있음)
7.0은 람다 식을 지원하지 않습니다. 언어 레벨을 8.0으로 변경하려면 이것을 앱 gradle에 추가하십시오.
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
실제로 Java 8에 대한 Eclipse 지원이 사용 가능합니다 ( here 및 here 참조) .
- Kepler의 경우 SR2에 대한 "기능 패치"로 제공됩니다 (예 : Eclipse 4.3.2).
- Luna (Eclipse 4.4)의 경우 표준 릴리스에 있습니다. ( 출시 일정 )
IntelliJ IDEA 15에서 Java 8 (람다 등)으로 컴파일하려면
CTRL + ALT + SHIFT + S
또는 파일 / 프로젝트 구조프로젝트 탭 열기
호환 가능한 Java 버전 (1.8)으로 Project SDK 설정
프로젝트 언어 레벨을 8로 설정
모듈 열기 탭
언어 수준을 8로 설정하고 확인을 클릭하십시오.
CTRL + ALT + S
또는 파일 / 설정빌드, 실행, 배포 / 컴파일러 / Java 컴파일러
대상 바이트 코드 버전을 1.8로 변경하고 확인을 클릭하십시오.
사용 : IntelliJ IDEA 2017.1.4 빌드 # IU-171.4694.23
프로젝트 설정 / 프로젝트 탭을 통해 언어 수준을 변경해도 아무런 효과가 없습니다. 대신 Alt+를 Enter누르고 "언어 레벨을 8로 설정-람다, 유형 주석 등"을 선택하십시오. 자동으로 해결되었습니다.
Stephen C가 지적했듯이 Eclipse Kepler (4.3)는 패치가 설치 될 때 Java 8을 지원합니다 (설치 지침은 여기 ).
설치가 완료되면 프로젝트에 java 8을 사용하도록 지시해야합니다. 먼저 일식에 JDK를 추가하십시오.
- 창-> 환경 설정으로 이동
- Java-> 설치된 JRE로 이동하십시오.
- 표준 VM을 추가하고 JRE의 위치를 가리 킵니다.
- 그런 다음 컴파일러로 이동하십시오.
- 컴파일러 준수 수준을 1.8로 설정
그런 다음 프로젝트에 JDK 1.8을 사용하도록 지시하십시오.
- 프로젝트-> 환경 설정으로 이동하십시오.
- Java 컴파일러로 이동
- 프로젝트 특정 설정 사용
- 컴파일러 준수 수준을 1.8로 설정
아래 설정을 확인하십시오.
파일-> 프로젝트 구조-> 프로젝트 탭.
*Project SDK should be set to 8 or above.*
파일-> 프로젝트 구조-> 모듈.
*Check that your or all modules has Language level set to 8 or above.*
파일-> 설정 (또는 다른 설정-> 최신 아이디어 버전의 새 프로젝트에 대한 환경 설정)
*Search for Java compiler and check if Project byte code version and per module byte code version is set 8 or above.*
문제는 위에서 정의한 범주 중 하나에 속할 수 있습니다.
같은 프로젝트는 ( 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
.
intellij 14에서는 다음 설정이 효과적이었습니다. Intellij14 설정
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>
가능한 원인 # 1 (이 질문에 대한 처음 3 개의 답변과 동일) : 프로젝트 구조 설정
파일> 프로젝트 구조> 프로젝트 설정에서 프로젝트> 프로젝트 SDK 로 1.8 (버전 65 이상, 최신 버전은 112)로 설정하고 프로젝트 언어 레벨 을 8로 설정하십시오.
파일> 프로젝트 구조> 플랫폼 설정에서 프로젝트로 이동하여 JDK 홈 경로 가 1.8로 설정되어 있는지 확인하십시오 (버전 65 이상에서 최신 버전은 112 임).
위의 방법으로 문제가 해결되지 않으면 대상 바이트 코드 버전 의 컴파일러를 확인하고 가능한 원인 # 2로 이동하십시오.
가능한 원인 # 2 : 컴파일러
- File> Settings> Build, Execution, Deployment> Compiler에서 Java Compiler로 이동하여 프로젝트 바이트 코드 버전 과 모듈의 모든 대상 바이트 코드 버전 을 1.8로 설정하십시오 . 적용을 클릭 하고 확인을 누르 십시오 . IntelliJ IDE를 다시 시작하십시오. 이 시점에서 내 IDE에서 람다식이 허용되었습니다.
최고의 소원 :)
나에게 제공된 솔루션 중 아무것도 작동하지 않았습니다.
이것이 최후의 수단이어야합니다.-> 프로젝트의 .iml 파일 열기 LANGUAGE_LEVEL을 JDK_1_8 또는 원하는 버전으로 변경하십시오. -> 이것이 도움이되지 않으면 프로젝트 루트 디렉토리에서 "JDK"를 grep하고 버전 설정이 포함 된 파일을 찾아서 선호하는 버전으로 설정해야합니다.
Ctrl + Alt + Shift + S를 누른 다음 프로젝트에서 언어 레벨 1.8을 선택 하십시오. 여기에서 Lambda Expressions에 대한 자세한 내용을 읽으 십시오.
람다 식에 대한 Ecplise를 지원하려면 다음을 수행하십시오.
- JDK 1.8 (창> 환경 설정> 설치된 JRE 및 컴파일러)을 사용 중인지 확인하십시오.
- Eclipse가 Lambdas ( Functional Interfaces ) 와 관련된 리팩토링을 제안하도록 새 기능 인터페이스를 정의하는 경우 주석 @FunctionalInterface를 사용하십시오 .
먼저 사용중인 JDK 버전을 확인하십시오. 1.8보다 높아야합니다.
그렇다면 아래 단계를 수행하십시오.
Intellij 에서 프로젝트 및 모듈의 언어 레벨을 변경하십시오 .
계획
1. 파일-> 프로젝트 구조-> 프로젝트-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.
2. 파일-> 프로젝트 구조-> 모듈-> 프로젝트 언어 수준 람바식이 작동하도록 8로 변경하십시오.
이것은 새로운 업데이트 된 intelliJ에서는 작동하지 않습니다 ... 새로운 intelliJ에서는 ...
-> 파일-> 프로젝트 구조-> 글로벌 라이브러리 ==>로 이동하여 JDK 1.8 이상 버전으로 설정하십시오.
또한 파일-> 프로젝트 구조 ---> 프로젝트 ===> "프로젝트 언어 매뉴얼"을 8로 설정
또한 파일-> 프로젝트 구조 ---> 프로젝트 SDK ==> 1.8
이를 통해 프로젝트에 람다 식을 사용할 수 있습니다.
'development' 카테고리의 다른 글
5 초마다 페이지를 다시로드하는 방법? (0) | 2020.05.26 |
---|---|
셀레늄 C # 웹 드라이버 : 요소가 나타날 때까지 기다립니다 (0) | 2020.05.26 |
JavaScript를 사용하여 'div'표시 / 숨기기 (0) | 2020.05.26 |
날짜 문자열이 해당 형식의 유효한 날짜인지 올바르게 판별하십시오. (0) | 2020.05.26 |
포트 80에서 Flask를 실행하려면 어떻게해야합니까? (0) | 2020.05.26 |