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

时间:2015-07-13 11:25:16

标签: java variadic-functions

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

public MyClass(String... params) {
    this.params = params;
}

目前,以下代码有效:

new MyClass();

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

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

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

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

4 个答案:

答案 0 :(得分:10)

可能是以下,一个额外的默认构造函数?

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

答案 1 :(得分:7)

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

你可以这样读:

// You can pass in some parameters if you want
public MyClass(String... params)

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

答案 2 :(得分:1)

如果调用者没有提供非空参数数组,则抛出IllegalArgumentException。

编辑:将原文解释为答案

答案 3 :(得分:1)

如果你想在编译时这样做,你需要按照你在上一个代码示例中的建议去做。

然后你可以使用ApacheCommons - ArrayUtils类:

password