在Java中强制用户填写varargs参数的好方法

8 java variadic-functions

我想在调用构造函数时强制用户填写可选参数:

public MyClass(String... params) {
    this.params = params;
}
Run Code Online (Sandbox Code Playgroud)

目前,以下代码有效:

new MyClass();
Run Code Online (Sandbox Code Playgroud)

我想阻止它.我想到了这个:

public MyClass(String param1, String... otherParams) {
    this.params = new String[1 + otherParams.length];
    this.params[0] = param1;
    // fill 1..N params from otherParams
}
Run Code Online (Sandbox Code Playgroud)

String[] params 不是一个选项,因为我需要能够使用逗号分隔的args.

有没有很好的解决方案来实现这一目标?请不要说varargs参数必须是可选的.问题不在于此.

Joo*_*gen 10

也许以下,一个额外的默认构造函数?

/**
 * Please provide at least one parameter.
 */
@Deprecated
public MyClass() {
    throw new IllegalStateException("Please provide at least one parameter");
}
Run Code Online (Sandbox Code Playgroud)

  • @Tom如果修饰符是私有的,新的MyClass()将调用varargs构造函数 - >失败 (6认同)

Pet*_*ček 7

不,在编译时没有其他方法可以做到这一点.您找到的是强制客户端代码传递至少一个参数的常用模式.

你可以这样读:

// You can pass in some parameters if you want
public MyClass(String... params)
Run Code Online (Sandbox Code Playgroud)

// I require one parameter, you can pass some additional if you want
public MyClass(String param1, String... otherParams)
Run Code Online (Sandbox Code Playgroud)