java - Passing an instance of Comparable to a method that expects a Comparator -


the stream class in java 8 defines max method requires comparator argument. here method signature:

optional<t> max(comparator<? super t> comparator) 

comparator functional interface has abstract compare method signature. notice compare requires 2 arguments.

int compare(t o1, t o2) 

the comparable interface has abstract compareto method signature. notice compareto requires 1 argument.

int compareto(t o) 

in java 8, following code works perfectly. however, expected compilation error like, "the integer class not define compareto(integer, integer)".

int max = stream.of(0, 4, 1, 5).max(integer::compareto).get(); 

can explain why it's possible pass instance of comparable method expects instance of comparator though method signatures not compatible?

that's nice feature method references. note integer::compareto instance method. need 2 integer objects call it. 1 on left side (the target object), , 1 on right side (the first , parameter).

so integer::compareto method reference method, expects 2 integer objects , returns int. comparator<integer> functional interface functions, expect 2 integer objects , return int. that's reason why works.


Comments

Popular posts from this blog

how to proxy from https to http with lighttpd -

android - Automated my builds -

python - Flask migration error -