Các biểu thức lambda Java không được hỗ trợ ở cấp độ ngôn ngữ này


198

Tôi đã thử nghiệm một số tính năng mới của Java 8 và sao chép ví dụ vào IDE của tôi (ban đầu là Eclipse, sau đó là IntelliJ) như được hiển thị ở đây

Eclipse không cung cấp hỗ trợ nào cho các biểu thức lambda và IntelliJ tiếp tục báo cáo lỗi

Biểu thức Lambda không được hỗ trợ ở cấp ngôn ngữ này

Tôi muốn biết nếu đây là một vấn đề với cài đặt, mã hoặc hỗ trợ của tôi.


3
Đây là một vấn đề IDE. Bạn phải thay đổi tuân thủ trình biên dịch của bạn.
Sotirios Delimanolis

6
Trong IDEA, chọn Tệp -> Cấu trúc dự án; bạn sẽ có tùy chọn để thay đổi cấp độ ngôn ngữ
fge 28/03 '

1
@Czipperz: Trên SO không chú thích tiêu đề bằng "Đã giải quyết", đánh dấu các câu trả lời hay nhất là "Được chấp nhận" bằng cách nhấp vào đánh dấu. Điều đó thưởng cho người trả lời và cho thấy câu hỏi có câu trả lời giải quyết vấn đề. Nếu không có câu trả lời nào cho độ phân giải phù hợp, bạn có thể tự do đăng câu trả lời và sau đó đánh dấu nó được chấp nhận (sau một thời gian chờ đợi).
Lawrence Dol


@LawrenceDol Tôi đã chú thích nó như thế bởi vì họ không đăng nó dưới dạng câu trả lời, mà là một bình luận.
Czipperz

Câu trả lời:


344

Trong IntelliJ IDEA:

Trong File MenuProject StructureProject, thay đổi Project Language Levelthành8.0 - Lambdas, type annotations etc.

Đối với Android 3.0+ Đi FileProject StructureModuleappvà Trong tab Thuộc tính được đặt Source CompatibilityTarget Compatibilitythành1.8 (Java 8)

Ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây


69
Lưu ý từ chỉnh sửa được đề xuất : Bạn cũng có thể định cấu hình cấp độ ngôn ngữ cho mọi mô-đun File Menu → Project Structure → Modules, nhưng theo mặc định, nó sẽ giống với cấp độ ngôn ngữ Dự án.
dùng1516873

6
Tôi đang đối mặt với cùng một vấn đề đối với Android Studio và không tìm thấy cài đặt tương tự trong IDE mà bạn đề cập ở trên. Bất kì lời đề nghị nào !
CoDe

18
@Shubh: Trong Gradle, thêm các dòng này, mã của bạn sẽ hoạt động: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
Sau khi nâng cấp lên IntelliJ 15 , tôi đã phải thay đổi Cấp độ ngôn ngữ dự án lên 9 và sau đó trở lại 8 để có hiệu lực.
averasko

17
Câu trả lời này đã lỗi thời. Trên Android 3.1.2, hãy truy cập File-> Project Structure-> Module you want to support lambdasvà đặt Khả năng tương thích nguồnKhả năng tương thích mục tiêu thành 1.8
Ivan

98

Bạn cũng nên thay đổi Cấp độ ngôn ngữ mã nguồn trên tab Nguồn (phần Mô-đun).

Thay đổi trình độ ngôn ngữ


3
câu trả lời của bạn nên cao hơn hoặc cùng với các câu trả lời khác
muni764

2
+1. Mức độ ưu tiên của các mô-đun cao hơn dự án. Vì vậy, tôi thích thiết lập mức độ ngôn ngữ của các phần mô-đun.
Ge Liu

Điều này không bao gồm các mô-đun mà IntelliJ cũng yêu cầu. Không điên về phía này của IntelliJ, quá nhiều nơi để kiểm tra điều tương tự.
SpacePrez

Tuyệt vời. Cảm ơn bạn rất nhiều. Điều này đã cứu ngày của tôi. Tôi đã vật lộn với lỗi không chắc chắn những gì cần phải được thực hiện để kích hoạt các biểu thức lambda.
Siddhartha Thota

Tôi đang chạy ap boot mùa xuân và không chắc có vấn đề gì sau khi tôi bắt đầu sử dụng biểu thức lambda, tôi đã thay đổi cài đặt dự án, nhưng sau khi làm theo cài đặt mô-đun này, Nó hoạt động tốt.
Siddhartha Thota

75

Giải pháp này hoạt động trong Android Studio 3.0 trở lên.

  1. Tệp> Cấu trúc dự án> Mô-đun> ứng dụng> tab Thuộc tính

nhập mô tả hình ảnh ở đây

Thay đổi cả hai Source CompatibilityTarget Compatibilityđể1.8

  1. Chỉnh sửa tập tin cấu hình

Bạn cũng có thể định cấu hình nó trực tiếp trong tệp build.gradle tương ứng

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

Đối với intellij 13, chỉ cần thay đổi cấp độ ngôn ngữ Dự án thành 8.0điều hướng sau.

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

java8

Mô đun cấp lang

Tôi cũng đã phải cập nhật Modules lang levelkhi không có plugin maven cho java compiler.

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

Mô-đun cấp lang

Nhưng điều này Module lang levelsẽ tự động được sửa nếu đã có sẵn maven plugincho nó,

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

Sau khi thay đổi mọi thứ có vẻ tốt


5
@Czipperz: Câu trả lời này có hình ảnh. Tôi thích nó, bởi vì tôi thực sự đã nhìn vào vị trí câu trả lời được chấp nhận được đề cập nhưng không nhận thấy sự thả xuống. Câu trả lời này có hình ảnh làm nổi bật vị trí chính xác nơi tùy chọn.
ArtOfWarfare

2
phần về tệp pom.xml thực sự hữu ích, cảm ơn!
Kevin Zhao

3
Sau khi thay đổi cấp độ ngôn ngữ cũng cho mô-đun đã khắc phục sự cố của tôi
nihasmata

23

Trong Android xây dựng canary studio (3. +), bạn có thể làm như sau:

Tệp -> Cấu trúc dự án -> Xem trong Phần Mô-đun, có tên của các mô-đun của lớp bạn. Nhấp vào mô-đun mà bạn muốn nâng cấp phiên bản java lên 1.8. -> Thay đổi "Tương thích nguồn" và "Tương thích mục tiêu" thành 1.8 từ 1.7 trở xuống. Đừng thay đổi bất cứ điều gì khác. -> Nhấp vào Áp dụng

bây giờ gradle sẽ đồng bộ lại và lỗi của bạn sẽ được xóa.


18

Chỉ cần thêm compileOptionsvào build.gradle ứng dụng của bạn:

android {


...

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

2
Google tuyên bố rằng họ đã từ chối Jack vài tuần trước. Hiện tại, hỗ trợ các tính năng ngôn ngữ Java 8 được cung cấp bởi plugin Android Gradle, bắt đầu với Bản xem trước Android Studio 2.4 4. Xem tại đây
nilsi

9

Dành cho người dùng mới nhất sử dụng Android studio 3.0.1 trở lên. Chỉ cần nhấp vào Alt + Enter và nâng cấp cấp độ ngôn ngữ của bạn lên 8.0 - Lambdas, nhập chú thích, v.v.


dễ dàng và tốt hơn những người khác
Abhishek Singh

6

Nếu bạn đang không được hỗ trợ tại Ngôn ngữ 5 , hãy kiểm tra điều này: (Đối với tôi, đó là trong phần Mô-đun )

Lanaguge Cấp 5 không được hỗ trợ


5

7.0 không hỗ trợ biểu thức lambda. Chỉ cần thêm phần này vào lớp ứng dụng của bạn để thay đổi cấp độ ngôn ngữ của bạn thành 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

nhập mô tả hình ảnh ở đây


2

Trên thực tế, hỗ trợ Eclipse cho Java 8 có sẵn: xem tại đâyđây .

  • Đối với Kepler, nó có sẵn dưới dạng "bản vá tính năng" chống lại SR2 (tức là Eclipse 4.3.2)
  • Đối với Luna (Eclipse 4.4), nó sẽ có trong bản phát hành tiêu chuẩn. ( lịch phát hành )

2

Để biên dịch với Java 8 (lambdas, v.v.) trong IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S hoặc Cấu trúc tệp / dự án

  • Mở tab dự án

  • Đặt Project SDK thành phiên bản java tương thích (1.8)

  • Đặt cấp độ ngôn ngữ dự án thành 8

  • Mở tab Mô-đun

  • Đặt cấp độ ngôn ngữ thành 8, nhấp vào OK

  • CTRL + ALT + S hoặc Tệp / Cài đặt

  • Xây dựng, thực thi, triển khai / trình biên dịch / trình biên dịch Java

  • Thay đổi phiên bản mã byte đích thành 1.8, nhấp OK


2

Sử dụng: IntelliJ IDEA 2017.1.4 Xây dựng # IU-171.4694.23

Thay đổi cấp độ ngôn ngữ thông qua tab Cài đặt dự án / Dự án đã không làm gì cả. Thay vào đó, nhấn Alt+ Entervà chọn "Đặt cấp độ ngôn ngữ thành 8 - Lambdas, nhập chú thích, v.v." và nó tự động giải quyết.


1

Như Stephen C đã chỉ ra, Eclipse Kepler (4.3) có hỗ trợ Java 8 khi bản vá được cài đặt (hướng dẫn cài đặt tại đây )

Sau khi cài đặt, bạn sẽ cần nói với các dự án của mình sử dụng java 8. Đầu tiên hãy thêm JDK vào nhật thực:

  • Chuyển đến Cửa sổ -> Tùy chọn
  • Chuyển đến Java -> JREs đã cài đặt
  • Thêm VM tiêu chuẩn và trỏ đến vị trí của JRE
  • Sau đó vào Trình biên dịch
  • Đặt mức độ tuân thủ của Trình biên dịch thành 1,8

Sau đó báo cho dự án sử dụng JDK 1.8:

  • Chuyển đến Dự án -> tùy chọn
  • Chuyển đến Trình biên dịch Java
  • Cho phép cài đặt cụ thể của dự án
  • Đặt mức độ tuân thủ của Trình biên dịch thành 1,8

1

Kiểm tra cài đặt bên dưới:

  1. Tệp-> Cấu trúc dự án-> Tab dự án.

    *Project SDK should be set to 8 or above.*
  2. Tệp-> Cấu trúc dự án-> Mô-đun.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Tệp-> Cài đặt (hoặc Cài đặt khác-> Tùy chọn cho các dự án mới trong phiên bản Ý tưởng mới hơn)

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

Vấn đề của bạn có thể rơi vào bất kỳ một trong các loại được xác định ở trên.


1

Cùng một dự án ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') hoạt động tốt trên của Windows máy nhanh mới và gạch dưới Java 8những thứ bằng màu đỏ trên máy tính xách tay cũ Ubuntu 18,04 (tuy nhiên dự án được biên soạn mà không có lỗi trên Ubuntu).

Hai điều duy nhất tôi đã thay đổi để buộc nó dừng gạch chân bởi màu đỏ là loại trừ incremental truedexOptions

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

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

trong app- mức build.gradle.



0

Ngay cả sau khi áp dụng các cài đặt cụ thể của dự án được xác định ở trên trên IntelliJ cũng như Eclipse, nó vẫn thất bại đối với tôi!

Điều làm việc cho tôi là bổ sung plugin maven với nguồn và đích với cài đặt 1.8 trong 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> 

0

Nguyên nhân có thể # 1 (giống như 3 câu trả lời đầu tiên cho câu hỏi này): Cài đặt cấu trúc dự án

  1. Tệp> Cấu trúc dự án> Trong Cài đặt dự án, đi đến Dự án> đặt SDK dự án thành 1.8 (với phiên bản 65 trở lên, mới nhất là 112) và đặt Cấp độ ngôn ngữ dự án thành 8.

  2. Tệp> Cấu trúc dự án> Trong Cài đặt nền tảng, đi đến Dự án> đảm bảo rằng đường dẫn nhà JDK của bạn được đặt thành 1.8 (với phiên bản 65 trở lên, mới nhất là 112).

Nếu cách trên không hoạt động, hãy kiểm tra phiên bản mã byte đích của trình biên dịch của bạn và chuyển sang Nguyên nhân có thể # 2.

Nguyên nhân có thể # 2: Trình biên dịch

  1. Tệp> Cài đặt> Xây dựng, Thực thi, Triển khai> Trong Trình biên dịch, đi tới Trình biên dịch Java> đặt Phiên bản mã byte dự án của bạn thành 1.8, cũng như tất cả Phiên bản mã byte mục tiêu cho các mô-đun của bạn. Nhấp vào Áp dụng và nhấn OK . Khởi động lại IntelliJ IDE của bạn. Biểu hiện Lambda đã được chấp nhận trong IDE của tôi tại thời điểm này.

Lời chúc tốt nhất :)


2
Điều này đã gần ba năm trước.
Czipperz

Điều này là dành cho những người sử dụng google để kiểm tra các vấn đề đã được giải quyết. Những người làm việc trong ngành công nghiệp biết điều này.
kuzevni

0

Đối với tôi không có giải pháp nào được cung cấp có hiệu quả.

Đây phải là giải pháp cuối cùng của bạn: -> Mở tệp .iml của dự án của bạn thay đổi LANGUAGE_LEVEL thành JDK_1_8 hoặc bất kỳ phiên bản nào bạn muốn. -> Nếu điều này không có ích, bạn nên grep "JDK" trong thư mục gốc của dự án và tìm tệp chứa cài đặt phiên bản và đặt nó thành phiên bản ưa thích của bạn.


-1

Ctrl + Alt + Shift + S và sau đó từ dự án chọn cấp độ ngôn ngữ 1.8, đọc thêm về Biểu thức Lambda tại đây


-1

Để có sự hỗ trợ của Ecplise cho các biểu thức lambda:

  1. Hãy chắc chắn rằng bạn đang sử dụng JDK 1.8 (Cửa sổ> Tùy chọn> JREs và Trình biên dịch đã cài đặt);
  2. Sử dụng chú thích @FunctionalInterface nếu bạn xác định bất kỳ giao diện chức năng mới nào để nhật thực sẽ gợi ý cho bạn các cấu trúc lại liên quan đến Lambdas ( Giao diện chức năng .)

-1

Trước tiên hãy kiểm tra phiên bản JDK bạn đang sử dụng, nó phải cao hơn 1.8.

Nếu có thì tiến hành các bước dưới đây.

Thay đổi cấp độ Ngôn ngữ của Dự án và các mô-đun trong Intellij .

Dự án

1.File-> Cấu trúc dự án-> Dự án-> Cấp độ ngôn ngữ dự án Thay đổi thành 8 để các biểu thức lamba hoạt động

2.File-> Cấu trúc dự án-> Mô đun-> Cấp độ ngôn ngữ dự án Thay đổi thành 8 để các biểu thức lamba hoạt động


-1

câu trả lời này không hoạt động cho intelliJ mới được cập nhật ... cho intelliJ mới ..

Chuyển đến -> tệp -> Cấu trúc dự án -> Thư viện toàn cầu ==> được đặt thành phiên bản JDK 1.8 trở lên.

cũng Tệp -> Cấu trúc dự án ---> dự án ===> đặt "hướng dẫn ngôn ngữ dự án" thành 8

cũng Tệp -> Cấu trúc dự án ---> sdk dự án ==> 1.8

Điều này sẽ kích hoạt biểu thức lambda cho dự án của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.