このコード行がどのように機能するかを誰でも説明できますか:
Rational sum = a.add(b).add(c);
オブジェクト b (引数) がメソッドを受け取る方法がわかりません。
これはメソッド連鎖と呼ばれます。メソッドadd()
は実際には、現在変更されているオブジェクトの参照、またはメソッドが呼び出されたのと同じ型の新しいオブジェクトを返します。によって参照されるオブジェクトa
がBigIntegerであるとします。a.add(b)BigInteger
を呼び出すと、値がであるオブジェクトが返されるため、そのオブジェクトを再度a+b
呼び出すことができます。.add(c)
Rational sum = a.add(b).add(c);
// is equivalent to
Rational temp = a.add(b);
Rational sum = temp.add(c);
メソッドの連鎖は必要ありません。可読性が向上し、ソース コードの量が減る可能性があるだけです。これは流暢なインターフェイスを構築するための中心的な概念です。
サンプル図:
このプラクティスは主にBuilder パターンで使用されます。このパターンは API 自体のStringBuilderクラスにあります。
オブジェクト b (引数) がメソッドを受け取る方法がわかりません。
いいえ、あなたの理解は間違っています。オブジェクトのa.add(b)
メソッドを呼び出しadd()
、オブジェクトa
の参照を渡していることを意味しますb
。メソッドが返す結果のオブジェクトa.add(b)
は と同じ型でa
あり、返されたオブジェクトのメソッドを連続して呼び出して、.add(c)
オブジェクトの参照c
をそのメソッドに渡します。