如何将列表<string>设置为可选参数?



这是我正在做的程序:

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;
}
}

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

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<>()是没有意义的,因为它总是会立即被丢弃,(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);
}

最新更新