'Java 8 method reference usage example
I am going through an example which pulls an Array of hidden files from current directory related to method reference which is as mentioned below
- using Anonymous inner class implementation
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
- using Method reference implementation
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
My question is FileFilter interface has only one abstract method (boolean accept(File pathname))
while implementing accept method using method reference how it is valid to using boolean isHidden() in File class which has no parameters. I learnt that we can apply method reference only when parameters match with abstract method but here accept method has a parameter of type File but isHidden has no parameters. Could you please explain how it is valid.
Solution 1:[1]
It's Lambda expression + method reference.
What you mentioned about accept method is about Lambda expression, and what you mentioned about File::isHidden is method reference.
They are 2 different things.
- https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
- https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Your original one:
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
Can be turned into: (Lamda expression)
File[] hiddenFiles = new File(".").listFiles(file -> file.isHidden());
Then it can be turned into: (method reference)
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | nnhthuan |
