Questa domanda riguarda le apparenti importazioni "nascoste" o locali di pacchetti Java che le espressioni lambda sembrano impiegare.Le espressioni Lambda Java utilizzano le importazioni "nascoste" o di pacchetti locali?
Il seguente codice di esempio si compila e funziona bene (solo elenca i file nella directory data):
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();
}
}
}
nota che la variabile filePath
è un'istanza di Path
, la cui attuazione Credo che è contenuto nel pacchetto java.nio.file.Path
, sebbene non ci sia import
per quel pacchetto.
Ora, se faccio una piccola modifica, dicono dal refactoring la chiamata a System.out.println
per il proprio metodo:
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);
}
}
devo società 'importazione' import java.nio.file.Path
, altrimenti ottengo un errore di compilazione.
Quindi le mie domande sono:
Se
filePath
è davvero un esempio dijava.nio.file.Path
, perché non lo fanno ho bisogno di importarlo nel primo esempio, eSe si utilizza il espressione lambda esegue l'importazione "sotto le copertine", quindi perché do Devo aggiungere lo
import
quando creo un metodo che prende un'istanza diPath
come argomento?
I metodi disponibili per chiamare sia filePath
e passedFilePath
sono identici, portandomi a credere che sono entrambe le istanze di java.nio.file.Path
.
Dichiara una variabile 'filePath' di tipo' Percorso', questo è il punto della sua domanda. La definizione lambda con 'filePath' è di quel tipo, ma non richiede alcuna importazione. È semplicemente una sintassi opzionale in Java 8 che non richiede di scrivere il tipo 'Path' sulla definizione della variabile – Alex
@Alex che ho perso. Risposta aggiornata – Philipp