强制用户在 Java 中填充可变参数的好方法
Nice way to force user fill varargs parameter in Java
我想强制用户在调用我的构造函数时填写一个可选参数:
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
不是一个选项,因为我需要能够使用逗号分隔的参数。
有什么好的解决方案可以实现这个目标吗?请不要说可变参数必须是可选的。问题不在于此。
如果调用方未提供非空参数数组,则抛出 IllegalArgumentException。
编辑:将原文解释为答案
不,没有其他方法可以在编译时执行此操作。您发现的是强制客户端代码至少传递一个参数的常见模式。
你可以这样读:
// 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)
也许下面是一个额外的默认构造函数?
/**
* Please provide at least one parameter.
*/
@Deprecated
public MyClass() {
throw new IllegalStateException("Please provide at least one parameter");
}
如果您想在编译时执行此操作,则需要按照上一个代码示例中的建议执行。
然后你可以使用 ApacheCommons - ArrayUtils class:
String[] allParams = ArrayUtils.add(otherParams, 0, param1); //Insert the first param at the first position of the array.
我想强制用户在调用我的构造函数时填写一个可选参数:
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
不是一个选项,因为我需要能够使用逗号分隔的参数。
有什么好的解决方案可以实现这个目标吗?请不要说可变参数必须是可选的。问题不在于此。
如果调用方未提供非空参数数组,则抛出 IllegalArgumentException。
编辑:将原文解释为答案
不,没有其他方法可以在编译时执行此操作。您发现的是强制客户端代码至少传递一个参数的常见模式。
你可以这样读:
// 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)
也许下面是一个额外的默认构造函数?
/**
* Please provide at least one parameter.
*/
@Deprecated
public MyClass() {
throw new IllegalStateException("Please provide at least one parameter");
}
如果您想在编译时执行此操作,则需要按照上一个代码示例中的建议执行。
然后你可以使用 ApacheCommons - ArrayUtils class:
String[] allParams = ArrayUtils.add(otherParams, 0, param1); //Insert the first param at the first position of the array.