只需要明确一点即可,java方法的变长参数只是语法糖,其本质上还是将变长的实际参数 varargs 包装为一个数组。
所以
Object[] objs
与
Object... objs
被看作是相同的签名,在源码级别是不能同时存在的,因此,无法编译通过
包装方式(注意,下面的代码不是实际的实现,而是一个比喻说明):
1 | public void invoke(String...varargs){} |
1 | public void invoke(String...varargs){} |
按照字面意思的理解,应该可选的意思。一开始我还以为是类似python里面的默认参数用法呢,结果语义是指某个值可能有也可能没有(null)。
感觉名字取得不是很直观。。我觉得叫Nullable不是更好?
python:
1 | def fn(a='default_value'): |