当前位置: 首页 > 面试题库 >

方法链接的优点和缺点,以及用对象本身替换所有无效返回参数的可能性

管景天
2023-03-14
问题内容

我对Java最为感兴趣,但是我认为这是一个普遍的问题。最近,我一直在使用Arquillian框架(ShrinkWrap),该框架使用了很多方法链接。方法链接的其他实例是在方法StringBuilderStringBuffer。使用这种方法有明显的好处:减少冗长是其中之一。

现在我在想,为什么不是所有具有void返回参数的方法都实现为可链接的?链接必须存在一些明显的客观缺陷。因为如果所有方法都可以链接,那么我仍然可以选择不使用它。

我不是要更改Java中的现有代码,这可能会破坏某些地方的内容,但是解释一下为什么不使用它也很好。从将来的框架(用Java编写)的设计角度来看,我会提出更多要求。

我发现了一个类似的问题,但是最初的询问者实际上想知道为什么将其视为一种良好实践:方法链接-为什么它是一种良好实践?

尽管有一些可用的答案,但我仍然不确定链接的所有优点和缺点是什么,以及使所有无效方法都可链接是否有用。


问题答案:

缺点

  • 原则上,它混淆了签名,如果某些东西返回一个新实例,我不希望它也是一个变种方法。例如,如果一个矢量具有缩放方法,那么如果它有一个返回值,我会假定它返回一个由输入缩放的新矢量,如果没有,那么我希望它在内部进行缩放。
  • 加上当然,如果扩展了类,您会遇到问题,即在链接的途中,对象将转换为超类型。当在父类中声明了链接方法,但在子类的实例上使用了链接方法时,就会发生这种情况。

好处

  • 它允许将 数学方程式 代码编写为完整方程,而无需多个中间对象(导致不必要的开销),例如,无需方法链接向量三叉积(作为随机示例),则必须编写为
    MyVector3d tripleCrossProduct=(vector1.multiply(vector2)).multiply(vector3);
    

缺点是创建了必须创建并收集垃圾的中间对象,或者

        MyVector3d tripleCrossProduct=vector1;
    tripleCrossProduct.multiplyLocal(vec2);
    tripleCrossProduct.multiplyLocal(vec3);

它避免了中间对象的创建,
仍然非常不清楚,tripleCrossProduct实际上变量名实际上是第3行的谎言。但是,如果您具有方法链接,则可以以普通的数学方式简洁地编写它,而无需创建不必要的中间对象。

    MyVector3d tripleCrossProduct=vector1.multiplyLocal(vector2).multiplyLocal(vector3);

所有这些都假定vector1是牺牲性的,不再需要再次使用

  • 当然有明显的好处;简洁。即使您的操作未在上述示例的庄园中链接,您仍然可以避免不必要地引用该对象
        SomeObject someObject=new SomeObject();
    someObject
      .someOperation()
      .someOtherOperation();

NB
MyVector3d未被用作Java的真实类,但是被假定为在.multiply()调用方法时执行叉积。.cross()不使用它,以便对那些不熟悉矢量演算的人更清楚“意图” 。NB Amit的解决方案是使用多行方法链接的第一个答案,我将其作为完整性的第四个要点的一部分



 类似资料:
  • 本文向大家介绍请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点?相关面试题,主要包含被问及请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1.数组: 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在

  • 主要内容:敏捷方法的优点,敏捷方法的缺点,瀑布模型的优点,瀑布模型的缺点,敏捷方法和瀑布模型的比较与传统的瀑布模型或其他模型相比,使用敏捷方法有很多优点。敏捷开发方法和测试实践为具有积极方面的众多组织创造了奇迹。它的积极方面不是隐藏的,它在组织中非常明显。 敏捷方法的优点 客户满意度是快速,持续开发和交付有用的软件。 客户,开发人员和产品负责人定期互动以强调而不是流程和工具。 产品开发快速且经常交付(数周而非数月)。 面对面交谈是最好的交流方式。 它不断关注技术卓越和良好的设计。 业务人员和开

  • 问题内容: 我正在尝试通过将包含某些URL的String替换为与浏览器兼容的链接URL来做一些事情。 我最初的String看起来像这样: 我想要得到的是一个看起来像这样的字符串: 我可以使用以下代码行捕获URL: 也许regexp表达式需要一些更正,但是它工作正常,需要进一步测试。 因此,问题是如何保持正则表达式捕获表达式并仅添加创建链接所需的内容:catched string 预先感谢您的关注和

  • 主要内容:Tableau的优点,Tableau的缺点Tableau的优点 Tableau的优点如下 - 数据可视化: Tableau是一种数据可视化工具,提供复杂的计算,数据混合和仪表板,用于创建漂亮的数据可视化。 快速创建交互式可视化: 用户可以使用Tableau的拖放功能创建非常交互式的可视化。 实施舒适: Tableau中提供了许多类型的可视化选项,可增强用户体验。与Python相比,Tableau非常容易学习。对编码不了解的用户也可以快速学

  • 主要内容:Python的优点,Python 的缺点Python 是一种开源的解释型脚本编程语言,它之所以非常流行,主要有三点原因: Python 简单易用,学习成本低,看起来非常优雅干净; Python 标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用; Python 站在了人工智能和大数据的风口上,站在风口上,猪都能飞起来。 举个简单的例子来说明一下 Python 的简单: 比如要实现某个功能,C语言可能需要 100 行代码

  • 主要内容:物联网的优点,物联网的缺点目前可用的技术都没有达到其100%的能力。它总是有一个差距。 因此可以说,物联网在这个世界中拥有重要的技术,可以帮助其他技术达到其准确和完整的100%能力。 下面来看看物联网的主要优点和缺点。 物联网的优点 物联网促进了商业部门日常生活中的几个优点。 它的一些优点如下: 高效的资源利用:如果了解每个设备的功能和工作方式,我们肯定会提高资源的有效利用率并监控自然资源。 最大限度地减少人力:当物联网设