Method Reference. Cannot make a static reference to the non-static method

后端 未结 3 503
难免孤独
难免孤独 2020-12-14 22:11

Can someone explain to me,
why passing a non-static method-reference to method File::isHidden is ok,
but passing method reference to a non-static met

3条回答
  •  既然无缘
    2020-12-14 22:46

    Method references to non-static methods require an instance to operate on.

    In the case of the listFiles method, the argument is a FileFilter with accept(File file). As you operate on an instance (the argument), you can refer to its instance methods:

    listFiles(File::isHidden)
    

    which is shorthand for

    listFiles(f -> f.isHidden())
    

    Now why can't you use test(MyCass::mymethod)? Because you simply don't have an instance of MyCass to operate on.

    You can however create an instance, and then pass a method reference to your instance method:

    MyCass myCass = new MyCass(); // the instance
    test(myCass::mymethod); // pass a non-static method reference
    

    or

    test(new MyCass()::mymethod);
    

    Edit: MyCass would need to be declared static (static class MyCass) in order to be accessible from the main method.

提交回复
热议问题