【问题标题】:How do I make List<string> as optional parameter?如何使 List<string> 作为可选参数?
【发布时间】:2021-08-16 03:30:32
【问题描述】:

这是我正在开发的程序:

public class SESReqErrorIdAndArgs {

    public String errorIdentifier;
    public List<String> args = new ArrayList<>();
 
    public  SESReqErrorIdAndArgs(String errorIdentifier,List<String> arguments = new ArrayList<>()){
        this.errorIdentifier = errorIdentifier;
        this.args = arguments;
    }
}

当我调用方法时,我想将第二个参数设为可选。我什至不想将它作为空值传递。我初始化参数(第二个参数)的方式是错误的。这样做的正确方法是什么。

【问题讨论】:

  • 写另一个重载。
  • 你考虑过可变参数吗? (即 String... 用于第二个参数)

标签: java list arraylist


【解决方案1】:

Java 不支持可选参数。您可以提供具有不同参数的多个签名,如下所示:

public SESReqErrorIdAndArgs(String errorIdentifier, List<String> arguments) {
    this.errorIdentifier = errorIdentifier;
    this.args = arguments;
}

public SESReqErrorIdAndArgs(String errorIdentifier) {
    this(errorIdentifier, new ArrayList<>());
}

请注意 (1) 在您的 args 初始化程序中分配 new ArrayList&lt;&gt;() 是没有意义的,因为它总是会被立即丢弃,并且 (2) 通常最好对以这种方式传递的项目进行防御性复制,所以这可能会更好(从 Java 10 开始):

public SESReqErrorIdAndArgs(String errorIdentifier, List<String> arguments) {
    this.errorIdentifier = errorIdentifier;
    this.args = List.copyOf(arguments);
}

public SESReqErrorIdAndArgs(String errorIdentifier) {
    this(errorIdentifier, Collections.emptyList());
}

最后,根据您的用例,可变参数可能是一个更好的选择:

public SESReqErrorIdAndArgs(String errorIdentifier, String... arguments) {
    this.errorIdentifier = errorIdentifier;
    this.args = List.of(arguments);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多