有人能解释一下这一行代码是如何工作的吗?
Rational sum = a.add(b).add(c);
我不明白对象b(这是一个参数)是如何接收方法的?
发布于 2013-07-27 13:07:29
这叫做方法链。方法add()实际上返回当前修改的对象的引用或调用该方法的同一类型的新对象。假设a所引用的对象是BigInteger,当您调用a.add(b)时,它返回一个值为a+b的BigInteger对象,因此您可以在该对象上再次调用.add(c)。
Rational sum = a.add(b).add(c);
// is equivalent to
Rational temp = a.add(b);
Rational sum = temp.add(c);不需要方法链接。它只会提高可读性,减少源代码的数量。它是构建fluent接口的核心概念。
示例插图:

这种实践主要在建造者模式中使用,您可以在StringBuilder类中的API本身中找到这种模式。
我不明白对象b(这是一个参数)是如何接收方法的?
不,您的理解是错误的,a.add(b)意味着您正在调用对象a上的方法add(),并将其传递给对象b的引用。方法a.add(b)返回的结果对象与a具有相同的类型,然后依次调用返回对象上的方法.add(c),传递对象c对该方法的引用。
发布于 2013-07-27 13:08:58
它的流畅链
链中的每个方法都必须返回一个类或一个接口。链中的下一个方法必须是返回类的一部分。
在您的示例中,a.add(b)返回一些calss/接口,然后对其调用add(c),该方法返回您的sum
https://stackoverflow.com/questions/17898127
复制相似问题