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

Java中的方法链接[

姬慎之
2023-03-14
问题内容

在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。

Car例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接this

public class Car {
    private String make;

    public Car setMake(String make) {
        this.make = make;
        return this;
    }   
}

内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗?

我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此
的引用(至少在我看来应该如此)。这样可以使以下情况更加清晰。

container.add((new JLabel("label text")).setMaximumSize(new Dimension(100,200)));

而不是更冗长: 注意:如果您愿意,它不会阻止您以这种方式进行编码。

JLabel label = new JLabel("label text");
label.setMaximumSize(new Dimension(100,200));
container.add(label);

我很想听听这个决定背后的原因,如果我不得不猜测那将是与此相关的开销,因此只应在需要时使用。


问题答案:

嗯 双向都有可读性的论点-就是试图将太多内容放在一行中。

但是说实话,我怀疑这是出于历史原因:普遍的“链接”行为在开发诸如Swing时并没有真正流行或众所周知。您可能会争辩说应该在以后添加它,但是类似的事情往往会导致二进制不兼容以及Sun
/ Oracle历来非常谨慎的其他问题。

最近的JDK库-例如参见ByteBuffer承重大,著名的例子-
提供链接行为等等,其中很有道理。



 类似资料:
  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加

  • 现在我正在准备编码面试,我有一个关于Java链表的问题。你能告诉我一些可靠的来源,我可以从那里学习和实践基本的链表方法。我喜欢这个:www.cs.cmu.edu/~adamchik/15-121/structions/linked%20lists/code/linkedlist.java,但我对一些方法实现感到困惑。例如,方法E get(int pos)返回的不是node,而是位于pos位置的节点

  • 我刚到Java,并试图在Java实施一个单链表。我已经包括了泛型的使用。代码如下所示: } code>get()方法给出错误消息 不兼容的类型,require:e,found:java.lang.object“at”返回当前。e 我认为我在错误地使用泛型。有人能让我知道这个方法的正确编码方式吗? 多谢了。

  • 问题内容: (不要与itertools.chain混淆) 我正在阅读以下内容:http : //en.wikipedia.org/wiki/Method_chaining 我的问题是: 在python中实现方法链接的最佳方法 是 什么? 这是我的尝试: 一个问题是调用是否修改但不返回。(那么我应该退货还是退货)。 有没有人有更好的实现链接的方法?可能有很多方法可以做到这一点。 我是否应该假设某个方

  • 本文向大家介绍PHP中的方法链接,包括了PHP中的方法链接的使用技巧和注意事项,需要的朋友参考一下 示例 方法链接是Martin Fowler的《领域特定语言》一书中介绍的一种技术。方法链接总结为 使修饰符方法返回宿主对象,以便可以在单个表达式中调用多个修饰符。 看这段非链接/常规代码(从上述书籍中移植到PHP) 通过方法链接,您可以以更紧凑的方式编写上述语句: 为此,您所需要做的就是使用要链接r

  • 问题内容: 我有一个父类,它定义了链接器方法的集合(返回“ this”的方法)。我想定义多个子类,这些子类包含它们自己的链接器方法,但也“覆盖”父方法,以便返回子类的实例而不是父类。 我不想在每个子类中都重复相同的方法,这就是为什么我有一个父类包含所有子类共享的方法的原因。谢谢。 问题答案: 返回的父类中的方法仍将返回对子类对象的引用。您只能将其视为父类的对象(除非您对其进行了强制转换),但实际上