Why are there primitive functions like DoubleFunction in Java 8

This issue is related to the fact that primitive types in Java are not unified to be substitutable for Object, and with generic type erasure.

Using Function<T, Integer> instead of IntFunction<T> when the last one suffices has 2 disadvantages:

  • Every returned int is boxed – meaning a larger memory footprint;
  • Every returned Integer gets an automatic runtime check (which can be optimized away, but yeah…);

Note that these kinds of issues with the collection framework in Java have led people to write a whole library, named Trove, that eschews the generic interfaces in favor of specialized collection types for every primitive type.

Leave a Comment