【发布时间】:2012-09-26 22:25:12
【问题描述】:
在此代码结构中:
public MyClass(Integer... numbers) {
do_something_with(numbers[]);
}
是否可以要求numbers 至少包含一个条目,以便在编译时进行检查? (当然,在运行时,我可以检查 numbers.length。)
显然我可以这样做:
public MyClass(Integer number, Integer... more_numbers) {
do_something_with(number, more_numbers[]);
}
但这不会很优雅。
我想这样做的原因是确保子类不会简单地忘记调用这个构造函数,这将默认调用super(),列表中没有数字。在这种情况下,我宁愿得到熟悉的错误信息:Implicit super constructor is undefined. Must explicitly invoke another constructor。
是否有另一种方法可以实现相同的效果,例如一些 @-annotation 将这个构造函数标记为非隐式?
【问题讨论】:
-
不,你不能这样做.. var-arg 只不过是
array.. 的不同表示。所以,就像你不能让你的数组至少包含一个元素一样。同样适用到 var-args.. -
RuntimeException,因为不是所有的编程错误都能在编译时发现。
-
这是语言限制。你不能那样做……
-
@-annotation(最后一句话)怎么样?有这种事吗?
-
我喜欢
MyClass(Integer number, Integer... more_numbers),只是我制作(很短)do_something_with(number + more_numbers)并制作 do_something_with 私有
标签: java arguments minimum variadic-functions