我想在调用构造函数时强制用户填写可选参数:
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)
不,在编译时没有其他方法可以做到这一点.您找到的是强制客户端代码传递至少一个参数的常用模式.
你可以这样读:
// 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)
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |