gpt4 book ai didi

java - 避免由于相同参数类型导致构造函数冲突的最佳实践?

转载 作者:行者123 更新时间:2023-11-29 07:03:54 24 4
gpt4 key购买 nike

虽然它只在极少数情况下发生,但有时我需要有两个具有相同参数类型的构造函数,当然每个构造函数具有不同的参数角色。这是一个例子:

public class MyClass {
public MyClass(String title, String content) {
// ...
}

public MyClass(String title, String link) {
// ...
}
}

我很想知道你们在这种情况下做了什么?

  1. 尽可能交换一个构造函数的参数顺序(好吧,不是在我的例子中)

  2. 放弃战斗,在构造函数之后调用 setter

  3. 从来没有发生过,因为它应该由设计来管理,比如多态/继承

  4. 使用设计模式

  5. 添加一个未使用的虚拟参数,使它们独一无二(不,真的吗?)

  6. ...


编辑: 不是自言自语:我刚刚在 java.util.HashSet 中发现了一件可怕的事情:(对于 JDK 类来说相当令人惊讶,即使它是包私有(private))

/* ......
* @param dummy Ignored (distinguishes this constructor from other int, float constructor.)
* ......
*/
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
...
}

最佳答案

使用 Builder Pattern .名为 Builder 的嵌套类接受设置,一次一个 setter 方法,build() 方法返回实际的 MyClass 对象。

public class MyClass {
private String title;
private String content;
private String link;
public static class Builder {
private String title;
private String content;
private String link;

public void setTitle(String title) { this.title = title; }
public void setContent(String content) { this.content = content; }
public void setLink(String link) { this.link = link; }
public MyClass build() {
return new MyClass(this);
}
}

private MyClass(Builder builder) {
// Validate here.
if (builder.title == null)
throw new IllegalArgumentException("Title is required!");
this.title = builder.title;
this.content = builder.content;
this.link = builder.link;
}
}

这样参数就不会混淆,构造函数也不会因为所有情况而倍增。

关于java - 避免由于相同参数类型导致构造函数冲突的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com