Mám řekněme následující kód:
Files.walk(Paths.get("C:\\"))
.map(Path::toFile)
.filter(File::isFile)
.forEach(file -> System.out.println(file.getAbsolutePath()));
Konkrétně mi jde o tohle: .filter(File::isFile)
Funkce File::isFile vypadá následovně:
public boolean isFile() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
if (isInvalid()) {
return false;
}
return ((fs.getBooleanAttributes(this) & FileSystem.BA_REGULAR) != 0);
}
Pochopil bych, kdyby File::isFile byla staticka tridni metoda
public static boolean isFile(File file) { ... }
Potom by mi bylo jasne, jak .filter(File::isFile) funguje, tj. pres funkcni interface. Jenze funkce isFile() se musi zavolat nad instanci tridy File a ja nechapu, jak se toho da dosahnout pomoci lambd. Muzete mi to nekdo vysvetlit?
Dik