यह प्रश्न जावा संकुल के स्पष्ट "छिपा" या स्थानीय आयात के बारे में है जो लैम्ब्डा अभिव्यक्तियों को नियोजित करने लगते हैं।क्या जावा लैम्ब्डा अभिव्यक्तियां "छिपी हुई" या स्थानीय पैकेज आयात का उपयोग करें?
निम्न नमूना कोड संकलित करता है तथा ठीक चलाता है (यह सिर्फ दिया निर्देशिका में फ़ाइलों को सूचीबद्ध करता है):
package com.mbm.stockbot;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Temp2 {
public static void main(String[] args) {
Temp2 t = new Temp2();
t.readDir();
}
public void readDir() {
try {
Files.walk(Paths.get("C:/Users/mbmas_000/Downloads/SEC Edgar"), 1).forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
System.out.println(filePath);
}
});
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
ध्यान दें कि चर filePath
Path
का एक उदाहरण है, जिसका कार्यान्वयन मुझे लगता है कि पैकेज में निहित है java.nio.file.Path
, हालांकि उस पैकेज के लिए import
नहीं है।
अब, अगर मैं एक छोटे से संशोधन करना, अपने स्वयं के विधि को System.out.println
करने के लिए कॉल पुनर्रचना से कहते हैं:
package com.mbm.stockbot;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Temp2 {
public static void main(String[] args) {
Temp2 t = new Temp2();
t.readDir();
}
public void readDir() {
try {
Files.walk(Paths.get("C:/Users/mbmas_000/Downloads/SEC Edgar"), 1).forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
printPath(filePath);
}
});
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void printPath(Path passedFilePath) {
System.out.println(passedFilePath);
}
}
मैं अब 'आयात' import java.nio.file.Path
, अन्यथा मैं एक संकलक त्रुटि मिलती है चाहिए।
तो मेरी प्रश्न हैं:
तो
filePath
वास्तव मेंjava.nio.file.Path
का एक उदाहरण है, क्यों नहीं मैं पहले उदाहरण में आयात करने की आवश्यकता है, औरहैं का उपयोग कर लैम्ब्डा अभिव्यक्ति "कवर के तहत" आयात करती है, तो मुझे
import
जोड़ने की आवश्यकता है जब मैं एक विधि बनाता हूं जोPath
का तर्क के रूप में उदाहरण लेता है?
तरीकों filePath
और passedFilePath
दोनों पर कॉल करने के लिए उपलब्ध है, समान हैं मुझे अग्रणी विश्वास करने के लिए वे java.nio.file.Path
के दोनों उदाहरण हैं।
वह 'पथ' प्रकार के 'फ़ाइलपाथ' चर घोषित करता है, जो कि उनके प्रश्न का बिंदु है। 'FilePath' के साथ लैम्ब्डा परिभाषा उस प्रकार का है, लेकिन इसमें कोई आयात की आवश्यकता नहीं है। यह जावा 8 में बस एक वैकल्पिक वाक्यविन्यास है जिसे आपको 'पथ' प्रकार को चर परिभाषा – Alex
@Alex I पर याद करने की आवश्यकता नहीं है। उत्तर अपडेट किया गया। – Philipp