初读此段代码,感觉of的可变参数方法,一个就能完成图示的逻辑,如下
public staticImmutableSet of(E... es) { switch (es.length) { case 0: return emptyImmutableSet(); case 1: return singletonImmutableSet(es[0]); default: return defaultImmutableSet(es); } }
那为什么还要声明有限个定长的参数,通过搜索获取了以下答案
- Varargs(可变长参数)和泛型不能很好地融合在一起 . Varargs方法可能会导致带有泛型参数的警告,并且重载会阻止该警告,除非在极少数情况下您要使用 of() 将超过11个项目添加到不可变列表中 .
- 还有一个微妙的运行时性能优势(除了避免数组分配,可变参数的数组),针对无参调用和有限个参数的调用,可以避免参数数组分配时的开销
2010年谷歌guava库中的这部分代码逻辑,在2017年发布的java9中也有体现(JEP 269: Convenience Factory Methods for Collections)



