有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将List<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;
    }
}

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


共 (1) 个答案

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

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

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