如何在 Java 中实现方法链(Method Chaining)

更新于 2025-12-27

lucian.pantelimon 2024-04-08

public class Dialog {

     public Dialog() {

     }

     public void setTitle(String title) {

         //Logic to set title in dialog
     }

     public void setMessage(String message) {

         //Logic to set message
     }     

     public void setPositiveButton() {

         //Logic to send button
     }
}   

让你的方法返回 this,例如:

public Dialog setMessage(String message) {
    // 设置消息的逻辑
    return this;
}

通过这种方式,每次调用其中一个方法后,都会返回同一个对象,从而可以继续调用该对象上的其他方法。

当你需要对一个对象连续调用多个方法时,这种技巧非常有用:它减少了所需的代码量,并允许你在方法链结束后获得一个单一的返回值。

减少代码量的示例

假设你的 Dialog 类有一个 show() 方法,你可以这样显示一个对话框:

new Dialog().setMessage("some message").setTitle("some title").show();

使用单一返回值的示例

假设在另一个类中,你有一个方法 showDialog(Dialog),那么你可以这样调用:

showDialog(new Dialog().setMessage("some message").setTitle("some title"));

构建器(Builder)模式示例

正如 Dennis 在你问题的评论中提到的构建器模式:

new DialogBuilder()
    .setMessage("some message")
    .setTitle("some title")
    .build()
    .show();

构建器模式允许你在构建类的新实例之前设置所有参数(尤其适用于包含 final 字段的类,或在对象创建后再设置某些值代价较高的情况)。

在上面的例子中:

  • setMessage(String)setTitle(String) 属于 DialogBuilder 类,并返回调用它们的同一个 DialogBuilder 实例;
  • build() 方法也属于 DialogBuilder 类,但它返回一个 Dialog 对象;
  • show() 方法则属于 Dialog 类。