谁能解释一下这行代码是如何工作的:
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(这是一个参数)如何接收方法?
不,您的理解是错误的,这意味着您正在对 objecta.add(b)
调用方法并将其传递给 object 的引用。该方法返回的结果对象与 具有相同的类型,然后您在返回的对象上依次调用该方法,并将对象的引用传递给该方法。add()
a
b
a.add(b)
a
.add(c)
c
链中的每个方法都必须返回一个类或一个接口。链中的下一个方法必须是返回类的一部分。
在你的情况下 a.add(b)
返回一些 calss/interface 然后调用 add(c)
那个方法返回你的sum