1

谁能解释一下这行代码是如何工作的:

Rational sum = a.add(b).add(c);

我不明白对象 b(这是一个参数)如何接收方法?

4

2 回答 2

4

这称为方法链接。该方法add()实际上返回当前修改对象的引用或调用该方法的相同类型的新对象。假设引用的对象aBigInteger,当您调用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()aba.add(b)a.add(c)c

于 2013-07-27T13:07:29.070 回答
1

其流畅的链接

链中的每个方法都必须返回一个类或一个接口。链中的下一个方法必须是返回类的一部分。

在你的情况下 a.add(b) 返回一些 calss/interface 然后调用 add(c) 那个方法返回你的sum

于 2013-07-27T13:08:58.170 回答