Bu soru, lambda ifadelerinin işe yarayacağı görünen "gizli" veya yerel Java paketleri paketleriyle ilgilidir.Java Lambda İfadeleri "Gizli" veya Yerel Paket İthalatlarından Yararlanıyor mu?
Aşağıdaki örnek kod derler ve (bu sadece verilen dizindeki dosyaları listeler) ince çalıştırır: Değişken filePath
Path
örneğidir olduğunu
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();
}
}
}
Not halde uygulama bence paketin içerdiği Bu paket için import
olmasına rağmen java.nio.file.Path
. Ben küçük bir değişiklik yapılmasını yaparsanız
Şimdi, kendi yöntemine System.out.println
çağrısına üstlenmeden tarafından ki:
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);
}
}
şimdi 'ithal' import java.nio.file.Path
, aksi takdirde bir derleyici hatası almak gerekir. kullanılıyorsa
filePath
Eğer İlk örnekte içe gerekmez yapmamaları, aslındajava.nio.file.Path
bir örneğidir ve:
Yani benim sorular burada lambda ifadesi içe aktarma işlemini "kapakların altında" gerçekleştirir, o zaman neden neden
import
parametresini eklediğimde, bir argüman olarakPath
örneğini alan bir yöntem oluşturduğumda?filePath
vepassedFilePath
hem çağırmak için kullanılabilir
yöntemleri aynıdır, onlar java.nio.file.Path
her iki örneği olduğuna inanmaya beni neden olur.
'Path' türünde bir' filePath 'değişkeni bildirir, sorusunun noktası budur. 'FilePath' ile lambda tanımı bu türden, ancak içe aktarma gerektirmez. Bu, Java 8'deki isteğe bağlı bir sözdizimidir. Bu, – Alex
@Alex I değişkeninin üzerine 'Path' türünü yazmanızı gerektirmez. Cevap güncellendi. – Philipp