Tag: 方法链接

Java中的方法链接

在回答前面几个问题的同时,从最近的一些工作中,我一直在想,为什么Java不支持内置类的方法链接。 例如,如果我要创build一个Car类,那么我可以通过重新构造它来链接 ,而不是void,如下所示: public class Car { private String make; public Car setMake(String make) { this.make = make; return this; } } 为什么内build的图书馆不倾向于这样做? 方法链有缺点吗? 我可能忽略了一些可以解释缺less方法链接的东西,但是默认情况下返回void的任何setter方法都应该返回一个对此的引用(至less在我眼中应该是这样)。 这会使下面的情况更加清洁。 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); 我会很有兴趣听到这个决定背后的原因,如果我不得不猜测这将是一个相关的开销,所以应该只在需要时使用。

条件构build器方法链接Fluent接口

我想知道什么是最好的方式来实现一个stream利的接口使用方法链接在一个Builder对象。 例如,我将如何在下面的示例中实现.WithSkill()和.WithSkill() .When()方法: var level = 5; var ninja = NinjaBuilder .CreateNinja() .Named("Ninja Boy") .AtLevel(level) .WithShurikens(10) .WithSkill(Skill.HideInShadows) .When(level > 3) .Build() 更新 – 一个样本解决scheme可以在这里find。

如何在新创build的对象上链接方法?

我想知道是否有一种方法链接PHP中新创build的对象的方法? 就像是: class Foo { public function xyz() { … return $this; } } $my_foo = new Foo()->xyz(); 任何人都知道一个方法来实现这一目标?

方法链 – 为什么这是一个很好的做法,或不是?

方法链接是对象方法返回对象本身以便为另一个方法调用结果的做法。 喜欢这个: participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save() 这似乎被认为是一个很好的做法,因为它产生可读的代码或“stream畅的界面”。 然而,对我来说,它反而似乎打破了面向对象本身所暗示的对象调用符号 – 结果代码并不表示对前一个方法的结果执行操作,这是面向对象代码通常如何工作的结果: participant.getSchedule('monday').saveTo('monnday.file') 这种差异为“调用结果对象”的点符号创build了两个不同的含义:在链接的上下文中,上面的例子会读为保存参与者对象,即使这个例子实际上是为了保存调度由getSchedule接收的对象。 我明白这里的区别在于被调用的方法是否应该返回某些东西(在这种情况下,它会返回被调用的对象本身进行链接)。 但是,这两种情况与标注本身并没有区别,只能从被调用方法的语义上区分。 当没有使用方法链时,我总是可以知道一个方法调用的操作与前一个调用的结果有关 – 链接,这个假设中断,我必须在语义上处理整个链,以了解实际对象叫真的是。 例如: participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter')) 最后两个方法调用引用getSocialStream的结果,而之前的方法引用参与者。 实际上,在上下文发生变化的情况下编写链接可能是不好的做法,但即使这样,您也必须经常检查看起来相似的点链是否实际上保持在同一个上下文中,或者只处理结果。 对我来说,虽然方法链接表面上确实产生可读的代码,但是重载点符号的含义只会导致更多的混淆。 因为我不认为自己是编程专家,所以我认为这是我的错。 所以:我错过了什么? 我理解方法链接有点不对吗? 有没有一些方法链接特别好的地方,或者有些地方特别糟糕? 旁注:我知道这个问题可以被理解为一个被掩盖为一个问题的意见陈述。 但是,它并不是 – 我真的很想理解为什么链接被认为是好的做法,我认为它打破了固有的面向对象的表示法,在哪里出错呢?