任何人都可以解释这行代码的工作原理:
Rational sum = a.add(b).add(c);
我不明白对象b(这是一个参数)是如何接收方法的?
答案 0 :(得分:4)
这称为method chaining。方法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);
不需要方法链接。它只能提高可读性并减少源代码量。这是构建fluent interface。
背后的核心概念示例说明:
此练习主要用于Builder pattern,您可以在StringBuilder课程的API本身中找到此模式。
我不明白对象b(这是一个参数)是如何接收方法的?
没有您的理解错误,a.add(b)
表示您在对象add()
上调用方法a
并向其传递对象b
的引用。方法a.add(b)
返回的结果对象与a
的类型相同,然后在返回的对象上调用方法.add(c)
,传递对象{{1}的引用那个方法。
答案 1 :(得分:1)
链中的每个方法都必须返回一个类或接口。链中的下一个方法必须是返回类的一部分。
在您的情况下a.add(b)
返回一些calss / interface然后在其上调用add(c)
,该方法会返回您的sum