Обратите внимание, что isGreater
является методом экземпляр .Как бы вы назвали метод экземпляра Foo
?Вам понадобится экземпляр из Foo
, в дополнение ко всем параметрам, требуемым для метода.
В случае isGreater
вам фактически понадобятся два экземпляра Foo
чтобы вызвать его (даже если для него требуется только 1 Foo
в качестве параметра):
foo1.isGreater(foo2)
^^^^ ^^^^
Также обратите внимание, что при использовании Foo::isGreater
вы не предоставляете ему экземпляр Foo
для вызова isGreater
включено!Обычно это не будет работать с методом экземпляра, но разработчики языка Java увидели его и позволили это.
В любом случае вам нужен экземпляр Foo
для вызова isGreater
и другойэкземпляр для передачи в качестве параметра.Поэтому мы можем «переписать» isGreater
как статический метод, подобный следующему:
public static boolean isGreater(Foo foo1, Foo foo2) {
return foo1.isGreater(foo2);
}
Экземпляр, для которого вы вызываете isGreater
, получил «повышение» в качестве параметра!На самом деле этого не происходит, но это все еще служит объяснением того, почему это вообще возможно.