打字猴:1.700446563e+09
1700446563
1700446564 Enum[]universe=getUniverse(elementType);
1700446565
1700446566 if(universe==null)
1700446567
1700446568 throw new ClassCastException(elementType+“not an enum”);
1700446569
1700446570 if(universe.length<=64)
1700446571
1700446572 //枚举数量小于等于64
1700446573
1700446574 return new RegularEnumSet<E>(elementType, universe);
1700446575
1700446576 else
1700446577
1700446578 //枚举数量大于64
1700446579
1700446580 return new JumboEnumSet<E>(elementType, universe);
1700446581
1700446582 }
1700446583
1700446584 看到这里恍然大悟,Java原来是如此处理的:当枚举项数量小于等于64时,创建一个RegularEnumSet实例对象,大于64时则创建一个JumboEnumSet实例对象。
1700446585
1700446586 紧接着的问题是:为什么要如此处理呢?这还要看看这两个类之间的差异,首先看RegularEnumSet类,代码如下:
1700446587
1700446588 class RegularEnumSet<E extends Enum<E>>extends EnumSet<E>{
1700446589
1700446590 //记录所有枚举排序号,注意是long型
1700446591
1700446592 private long elements=0L;
1700446593
1700446594 //构造函数
1700446595
1700446596 RegularEnumSet(Class<E>elementType, Enum[]universe){
1700446597
1700446598 super(elementType, universe);
1700446599
1700446600 }
1700446601
1700446602 //加入所有元素
1700446603
1700446604 void addAll(){
1700446605
1700446606 if(universe.length!=0)
1700446607
1700446608 elements=-1L>>>-universe.length;
1700446609
1700446610 }
1700446611
1700446612 }
[ 上一页 ]  [ :1.700446563e+09 ]  [ 下一页 ]