通常の Java では戻り値の型が常に最初に指定されるため、この順序は奇妙に思えます。次のように:
public static double sum(Iterable<Number> nums) { ... }
では、Function クラスと BiFunction クラスで、それらを逆に指定するという選択がなされたのはなぜでしょうか? 次のように:
interface Function<T,R>
interface BiFunction<T,U,R>
ここでどちらが優れているかについて意見を求めているわけではありませんが、具体的には次のとおりです。
a) ある順序を他の順序よりも優先することで、技術的またはその他の (スタイル以外の) 利点はありますか? それとも恣意的な選択ですか?
b) 文書化された説明、または信頼できる情報源からの明言された理由、なぜ一方が他方よりも選ばれたのかを知っている人はいますか?
余談ですが、より高いアリティに拡張すると、順序はさらに奇妙に見えます。たとえば、架空の QuadFunction:
interface QuadFunction<A,B,C,D,R> { ... }
(執筆時点では、ライブラリの最高のアリティは 2、つまり BiFunction です。)
参照: http://download.java.net/jdk8/docs/api/java/util/function/package-summary.html