栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的命名参数习语

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的命名参数习语

我似乎最喜欢在构造函数中模拟关键字参数的Java惯用语是Builder模式,有效Java 2nd
Edition中
对此进行了描述。

基本思想是拥有一个Builder类,该类具有用于不同构造函数参数的setter(但通常没有getter)。还有一种

build()
方法。Builder类通常是用于构建的类的(静态)嵌套类。外部类的构造函数通常是私有的。

最终结果如下所示:

public class Foo {  public static class Builder {    public Foo build() {      return new Foo(this);    }    public Builder setSize(int size) {      this.size = size;      return this;    }    public Builder setColor(Color color) {      this.color = color;      return this;    }    public Builder setName(String name) {      this.name = name;      return this;    }    // you can set defaults for these here    private int size;    private Color color;    private String name;  }  public static Builder builder() {      return new Builder();  }  private Foo(Builder builder) {    size = builder.size;    color = builder.color;    name = builder.name;  }  private final int size;  private final Color color;  private final String name;  // The rest of Foo goes here...}

要创建Foo的实例,您可以编写以下内容:

Foo foo = Foo.builder()    .setColor(red)    .setName("Fred")    .setSize(42)    .build();

主要警告如下:

  1. 设置模式非常繁琐(如您所见)。除了计划在许多地方实例化的类以外,可能不值得。
  2. 没有编译时检查是否所有参数都只指定了一次。您可以添加运行时检查,也可以仅将其用于可选参数,并使必需参数成为Foo或Builder的构造函数的常规参数。(人们通常不必担心多次设置相同参数的情况。)

您可能还想查看此博客文章(不是我的)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号