Я думаю, это зависит от того, как поздно он знает тип.
В Java 7 код в правой части =
не знает, как использовать это выражение. Для компиляции требуется изменение дизайна компилятора.
Теоретически вам даже не нужно объявление переменной, потому что оно указано в родительском или может подразумеваться.
FileFilter java = (File f) -> f.getName().endsWith(".java");
может быть
FileFilter java = -> pathname.getName().endsWith(".java");
или с подразумеваемым геттером.
FileFilter java = -> pathname.name.endsWith(".java");
или вы можете предположить, что параметры импортируются в пространство имен неявно, так как имеется только один параметр. (Как SQL делает с именами столбцов)
FileFilter java = -> name.endsWith(".java");