とりあえずまとめました。
要点
- classとobjectの違い is 何というと、ここでは挙げられなかったけどclassのシングルトンオブジェクトバージョンがobjcetなのだけれど、objectではコンパニオンオブジェクトが作れる。
- objectとcase classの違いは、作成されるコンパニオンオブジェクトで提供される関数の数。case classのほうが提供される関数の数はobjectより多い。
- Function1とかFunction2とかの引数や戻り値にはIntやStringの他に関数も使える
- コンストラクタを呼んでいるかのようにメソッド経由でインスタンスを生成できるので、newを使う必要がない
- FunctionNとobject classとは直接は関係がないが、FunctionN(とそこに紐づくスーパークラス、サブクラス)で提供されている関数をobjectやcase classで使うことができる
- Function1の引数側の型は親クラスへの汎化が許されており、返り値の方は子クラスへの特化(これはAPIの冒頭に書いてある)
参考
Function1のレファレンス
レファレンスの読み方としての共変 反変
classやobjectの参考