जावा "लैम्बडा के भाव इस भाषा के स्तर पर समर्थित नहीं हैं"


199

मैं जावा 8 की कुछ नई विशेषताओं का परीक्षण कर रहा था और उदाहरण के लिए मेरी आईडीई (ग्रहण मूल रूप से, फिर इंटेलीजे) में कॉपी की गई थी जैसा कि यहां दिखाया गया है

ग्रहण ने लंबोदर भावों के लिए कोई समर्थन नहीं दिया, और इंटेलीजे ने एक त्रुटि की रिपोर्ट की

इस भाषा के स्तर पर लैम्ब्डा अभिव्यक्तियों का समर्थन नहीं किया गया

मैं जानना चाहूंगा कि क्या यह मेरे इंस्टॉल, कोड या समर्थन के साथ कोई समस्या है।


3
यह एक आईडीई मुद्दा है। आपको अपने कंपाइलर अनुपालन को बदलना होगा।
सोथिरियोस डेलिमोलिस

6
IDEA में, फ़ाइल चुनें -> प्रोजेक्ट संरचना; आपके पास भाषा स्तर बदलने का विकल्प होगा
fge

1
@Czipperz: SO ने "Solved" शीर्षक के साथ एनोटेट नहीं किया है, टिक पर क्लिक करके सर्वश्रेष्ठ उत्तरों को "स्वीकृत" के रूप में चिह्नित करें। वह उत्तर देने वाले को पुरस्कृत करता है और दिखाता है कि प्रश्न का उत्तर है जो समस्या का समाधान करता है। यदि कोई उत्तर सही समाधान नहीं देता है, तो आप एक स्व-उत्तर पोस्ट करने के लिए स्वतंत्र हैं और फिर इसे स्वीकार किया जाता है (प्रतीक्षा अवधि के बाद)।
लॉरेंस डोल


@ लॉरेंसडॉल मैंने इसे इस तरह एनोटेट किया क्योंकि उन्होंने इसे उत्तर के रूप में नहीं, बल्कि एक टिप्पणी के रूप में पोस्ट किया था।
Czipperz

जवाबों:


348

इंटेलीज आईडीईए में:

में File MenuProject StructureProject, परिवर्तन Project Language Levelकरने के लिए8.0 - Lambdas, type annotations etc.

Android के लिए 3.0+ Go FileProject StructureModuleappऔर प्रॉपर्टीज़ में सेट Source Compatibilityऔर Target Compatibilityटू1.8 (Java 8)

स्क्रीनशॉट:

यहां छवि विवरण दर्ज करें


69
प्रस्तावित संपादन से ध्यान दें : आप प्रत्येक मॉड्यूल के लिए भाषा स्तर भी कॉन्फ़िगर कर सकते हैं File Menu → Project Structure → Modules, लेकिन डिफ़ॉल्ट रूप से यह प्रोजेक्ट भाषा स्तर के समान होगा।
user1516873

6
मैं एंड्रॉइड स्टूडियो के लिए एक ही मुद्दे का सामना कर रहा हूं और न ही आईडीई में समान सेटिंग्स पाई गई हैं जिनका आप ऊपर उल्लेख करते हैं। कोई उपाय !
कोडे सेप

18
@ शुभा: ग्रैडल में, इन पंक्तियों को जोड़ें, आपका कोड काम करेगा: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
बावो

6
IntelliJ 15 में अपग्रेड करने के बाद , मुझे प्रोजेक्ट लैंग्वेज लेवल को 9 तक बदलना पड़ा और उसके बाद वापस 8 तक प्रभावी होने के लिए।
averasko

17
यह उत्तर पुराना है। एंड्रॉइड 3.1.2 पर जाएं File-> Project Structure->> Module you want to support lambdasऔर स्रोत संगतता और लक्ष्य संगतता को 1.8 पर
इवान

98

आपको स्रोत टैब पर स्रोत कोड भाषा स्तर भी बदलना चाहिए (मॉड्यूल भाग)।

भाषा स्तर बदलें


3
आपका उत्तर अधिक होना चाहिए या अन्य उत्तरों के साथ
muni764

2
+1। मॉड्यूल की प्राथमिकता परियोजना की तुलना में अधिक है। इसलिए मैं मॉड्यूल भाग की भाषा स्तर सेट करना पसंद करता हूं।
जीई लियू

इसमें वह मॉड्यूल शामिल नहीं है जिसकी IntelliJ को भी आवश्यकता होती है। IntelliJ के इस पक्ष के बारे में पागल नहीं, एक ही चीज़ की जांच करने के लिए बहुत सारे स्थान।
स्पेसप्रेज़

बहुत बढ़िया। बहुत बहुत धन्यवाद। इससे मेरा दिन बच गया। मैं इस त्रुटि से जूझ रहा था कि यकीन नहीं होता कि लंबोदर भावों को सक्षम करने के लिए क्या किया जाना चाहिए।
सिद्धार्थ थोटा

मैं एक स्प्रिंग बूट एपी चला रहा था, और यह निश्चित नहीं था कि लंबोदर अभिव्यक्ति का उपयोग शुरू करने के बाद मैं क्या गलत हो गया था, मैंने परियोजना सेटिंग्स को बदल दिया, लेकिन इस मॉड्यूल सेटिंग का पालन करने के बाद, यह ठीक काम किया।
सिद्धार्थ थोता

75

यह समाधान एंड्रॉइड स्टूडियो 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

इंटेलीज 13 के लिए, निम्नलिखित नेविगेशन के साथ बस प्रोजेक्ट भाषा स्तर को ही बदल दें 8.0

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

java8

मॉड्यूल लैंग स्तर

Modules lang levelजब कोई मावेन प्लगइन नहीं था तो मुझे भी अपडेट करना पड़ा 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: इस उत्तर में चित्र हैं। मैं इसे पसंद करता हूं, क्योंकि मैं वास्तव में पहले से ही इस मौके पर देखे गए उत्तर को स्वीकार कर चुका था लेकिन ड्रॉपडाउन को नोटिस करने में विफल रहा। इस जवाब में सटीक स्थान पर प्रकाश डाला गया चित्र है जहाँ विकल्प है।
आर्टऑफवर्फेल

2
pom.xml फ़ाइल के बारे में हिस्सा वास्तव में उपयोगी है, धन्यवाद!
केविन झाओ

3
मॉड्यूल के लिए भाषा स्तर भी बदलने के बाद मेरी समस्या तय हो गई
nihasmata

23

Android स्टूडियो कैनरी बिल्ड (3. +) में, आप निम्न कार्य कर सकते हैं:

फ़ाइल -> परियोजना संरचना -> मॉड्यूल अनुभाग में देखें, आपकी कक्षा के मॉड्यूल के नाम हैं। उस मॉड्यूल पर क्लिक करें जिसमें आप जावा को 1.8 संस्करण में अपग्रेड करना चाहते हैं। -> 1.7 या निम्न से "स्रोत संगतता" और "लक्ष्य संगतता" को 1.8 में बदलें। और कुछ मत बदलो। -> लागू करें पर क्लिक करें

अब ग्रेडल फिर से सिंक होगा और आपकी त्रुटि दूर हो जाएगी।


18

बस compileOptionsbuild.gradle your app में जोड़ें :

android {


...

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

2
Google ने घोषणा की कि वे कुछ हफ्ते पहले जैक को अपदस्थ कर रहे हैं। जावा 8 भाषा सुविधाएँ समर्थन अब मूल रूप से एंड्रॉइड ग्रैडल प्लगइन द्वारा प्रदान किया गया है, जो कि एंड्रॉइड स्टूडियो 2.4 पूर्वावलोकन 4 से शुरू होता है। यहां देखें
nilsi

9

Android स्टूडियो 3.0.1 या इसके बाद के संस्करण का उपयोग करने वाले नवीनतम उपयोगकर्ताओं के लिए। बस Alt + दर्ज करें और अपनी भाषा के स्तर को 8.0 में अपग्रेड करें - लैम्ब्डा, टाइप एनोटेशन आदि।


दूसरों की तुलना में आसान और बेहतर
अभिषेक सिंह

6

यदि आपको भाषा 5 पर समर्थन नहीं मिल रहा है , तो इसे देखें: (मेरे लिए यह मॉड्यूल अनुभाग में था)

Lanaguge स्तर 5 समर्थित नहीं है


5

7.0 लैम्बडा एक्सप्रेशन का समर्थन नहीं करता है। अपनी भाषा के स्तर को 8.0 में बदलने के लिए बस इसे अपने ऐप ग्रेड में जोड़ें:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

यहां छवि विवरण दर्ज करें


2

दरअसल, जावा 8 के लिए ग्रहण समर्थन उपलब्ध है: यहां और यहां देखें

  • केपलर के लिए, यह SR2 के खिलाफ "फ़ीचर पैच" के रूप में उपलब्ध है (यानी 4.3.2 ग्रहण)
  • लूना (ग्रहण 4.4) के लिए यह मानक रिलीज में होगा। ( रिलीज का शेड्यूल )

2

IntelliJ IDEA 15 में जावा 8 (लैम्ब्डा आदि) के साथ संकलन करने के लिए;

  • CTRL + ALT + SHIFT + S या फ़ाइल / परियोजना संरचना

  • प्रोजेक्ट टैब खोलें

  • सेट परियोजना SDK संगत जावा संस्करण (1.8) के लिए

  • प्रोजेक्ट भाषा स्तर को 8 पर सेट करें

  • ओपन मॉड्यूल टैब

  • भाषा स्तर को 8 पर सेट करें, ठीक पर क्लिक करें

  • CTRL + ALT + S या फ़ाइल / सेटिंग्स

  • निर्माण, निष्पादन, परिनियोजन / संकलक / जावा संकलक

  • लक्ष्य बाइटकोड संस्करण को 1.8 में बदलें, ठीक पर क्लिक करें


2

उपयोग करना: IntelliJ IDEA 2017.1.4 # IU-171.4694.23 बनाएँ

प्रोजेक्ट सेटिंग्स / प्रोजेक्ट टैब के माध्यम से भाषा का स्तर बदलने से कुछ नहीं हुआ। इसके बजाय Alt+ मारने Enterऔर "भाषा सेट को 8 पर सेट करें - लैम्ब्डा, प्रकार एनोटेशन आदि" का चयन करें। और यह अपने आप हल हो गया।


1

जैसा कि स्टीफन सी ने बताया, पैच स्थापित होने (स्थापना निर्देश) में एक्लिप्स केपलर (4.3) का जावा 8 समर्थन है )

एक बार स्थापित होने के बाद, आपको जावा को उपयोग करने के लिए अपनी परियोजनाओं को बताना होगा। सबसे पहले ग्रहण में JDK जोड़ें:

  • विंडो पर जाएं -> प्राथमिकताएं
  • जावा -> स्थापित JREs पर जाएं
  • मानक VM जोड़ें, और JRE के स्थान को इंगित करें
  • फिर कंपाइलर पर जाएं
  • कंपाइलर कंप्लायंस लेवल को 1.8 पर सेट करें

फिर परियोजना JDK 1.8 का उपयोग करने के लिए कहें:

  • प्रोजेक्ट पर जाएं -> प्राथमिकताएं
  • जावा कंपाइलर पर जाएं
  • प्रोजेक्ट विशिष्ट सेटिंग्स सक्षम करें
  • कंपाइलर कंप्लायंस लेवल को 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 लैपटॉप (हालांकि परियोजना Ubuntu पर त्रुटियों के बिना संकलन है)।

केवल दो बातें मैं इसे मजबूर करने के लिए बदल दिया है लाल से रेखांकित रोक के छोड़कर गए थे incremental trueऔरdexOptions

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

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

में app- स्तर build.gradle



0

IntelliJ के साथ-साथ एक्लिप्स पर उपर्युक्त परिभाषित परियोजना विशिष्ट सेटिंग्स को लागू करने के बाद भी, यह अभी भी मेरे लिए असफल रहा था!

मेरे लिए जो काम किया गया वह स्रोत के साथ मावेन प्लगइन के अलावा और पोम एक्सएमएल में 1.8 सेटिंग के साथ लक्ष्य था:

<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. फ़ाइल> प्रोजेक्ट संरचना> प्रोजेक्ट सेटिंग्स के तहत, प्रोजेक्ट पर जाएं> प्रोजेक्ट एसडीके को 1.8 (संस्करण 65 या उससे ऊपर, नवीनतम 112 है) पर सेट करें और प्रोजेक्ट भाषा स्तर 8 पर सेट करें ।

  2. फ़ाइल> प्रोजेक्ट संरचना> प्लेटफ़ॉर्म सेटिंग्स के तहत, प्रोजेक्ट पर जाएं> सुनिश्चित करें कि आपका JDK होम पथ 1.8 पर सेट है (संस्करण 65 या ऊपर के साथ, नवीनतम 112 है)।

यदि ऊपर काम नहीं करता है, तो अपने संकलक के लक्ष्य बाइटकोड संस्करण की जांच करें और संभावित कारण # 2 पर आगे बढ़ें।

संभावित कारण # 2: संकलक

  1. फ़ाइल> सेटिंग्स> निर्माण, निष्पादन, तैनाती> कंपाइलर के तहत, जावा कंपाइलर पर जाएं> अपने प्रोजेक्ट बायटेकोड संस्करण को 1.8 पर सेट करें , साथ ही अपने मॉड्यूल के लिए सभी लक्ष्य बायोटेक संस्करणलागू करें पर क्लिक करें और ठीक पर क्लिक करें । अपने IntelliJ IDE को पुनरारंभ करें। इस बिंदु पर मेरी आईडीई में लैम्ब्डा अभिव्यक्ति को स्वीकार किया गया था।

शुभकामनाएँ :)


2
यह लगभग तीन साल पहले था।
23 अक्टूबर को Czipperz

यह पहले से ही हल की गई समस्याओं की जांच के लिए Google का उपयोग करने वाले लोगों के लिए है। इंडस्ट्री में काम करने वाले लोग इसे जानते हैं।
कुजेवनी

0

मेरे लिए किसी भी समाधान ने काम नहीं किया।

यह आपका अंतिम उपाय होना चाहिए: -> आपकी परियोजना की ओपन .iml फ़ाइल LANGUAGE_LEVEL को JDK_1_8 या आप जो भी संस्करण चाहते हैं उसे बदल दें। -> अगर यह मदद नहीं करता है, तो आपको अपनी परियोजना रूट डायरेक्टरी में "JDK" को grep करना चाहिए और उस फ़ाइल को ढूंढना चाहिए जिसमें संस्करण सेटिंग है और इसे अपने पसंदीदा संस्करण पर सेट करें।


-1

Ctrl + Alt + Shift + S और फिर प्रोजेक्ट से भाषा स्तर 1.8 का चयन करें, यहाँ लैम्ब्डा एक्सप्रेशंस के बारे में अधिक पढ़ें


-1

लैम्ब्डा एक्सप्रेशंस के लिए एक्लिप्स का समर्थन करने के लिए:

  1. सुनिश्चित करें कि आप JDK 1.8 (Window> Preferences> Installed JREs and Compiler) का उपयोग कर रहे हैं;
  2. यदि आप किसी भी नए कार्यात्मक इंटरफ़ेस को परिभाषित करते हैं, तो एनोटेशन @FunctionalInterface का उपयोग करें ताकि ग्रहण आपको लैम्ब्डा ( कार्यात्मक इंटरफ़ेस ) से संबंधित रिफ्लेक्टरिंग का सुझाव दे ।

-1

पहले JDK के संस्करण की जांच करें जिसका आप उपयोग कर रहे हैं, यह 1.8 से अधिक होना चाहिए।

यदि यह नीचे चरणों के लिए आगे बढ़ना है।

इंटेलीज में परियोजना का भाषा स्तर और मॉड्यूल बदलें ।

परियोजना

1.फाइल-> प्रोजेक्ट स्ट्रक्चर-> प्रोजेक्ट-> प्रोजेक्ट लैंग्वेज स्तर इसे लांबा एक्सप्रेशन के काम करने के लिए 8 में बदलें

2.फाइल-> प्रोजेक्ट स्ट्रक्चर-> मॉड्यूल-> प्रोजेक्ट लैंग्वेज स्तर इसे लांबा एक्सप्रेशंस के काम करने के लिए 8 में बदलें


-1

यह जवाब नए अपडेटेड इंटेलीजे के लिए काम नहीं कर रहा है ... नए इंटेलीज के लिए ..

-> फ़ाइल -> प्रोजेक्ट स्ट्रक्चर -> ग्लोबल लाइब्रेरीज़ ==> पर जाएं JDK 1.8 या उच्चतर संस्करण।

फ़ाइल भी -> प्रोजेक्ट स्ट्रक्चर ---> प्रोजेक्ट्स ===> "प्रोजेक्ट लैंग्वेज मैनुअल" को 8 पर सेट करें

फ़ाइल भी -> परियोजना संरचना ---> परियोजना एसडीके ==> 1.8

यह आपकी परियोजना के लिए लैंबडा अभिव्यक्ति को सक्षम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.