打字猴:1.700446513e+09
1700446513
1700446514 EnumSet<Const>cs=EnumSet.allOf(Const.class);
1700446515
1700446516 EnumSet<LargeConst>lcs=EnumSet.allOf(LargeConst.class);
1700446517
1700446518 //打印出枚举项数量
1700446519
1700446520 System.out.println(“Const枚举项数量:”+cs.size());
1700446521
1700446522 System.out.println(“LargeConst枚举项数量:”+lcs.size());
1700446523
1700446524 //输出两个EnumSet的class
1700446525
1700446526 System.out.println(cs.getClass());
1700446527
1700446528 System.out.println(lcs.getClass());
1700446529
1700446530 }
1700446531
1700446532 程序很简单,现在的问题是:cs和lcs的class类型是否相同?应该相同吧,都是EnumSet类的工厂方法allOf生成的EnumSet类,而且JDK API也没有提示EnumSet有子类。我们来看输出结果:
1700446533
1700446534 Const枚举项数量:64
1700446535
1700446536 LargeConst枚举项数量:65
1700446537
1700446538 class java.util.RegularEnumSet
1700446539
1700446540 class java.util.JumboEnumSet
1700446541
1700446542 很遗憾,两者不相等。就差1个元素,两者就不相等了?确实如此,这也是我们要重点关注枚举项数量的原因。先来看看Java是如何处理的,首先跟踪allOf方法,其源代码如下:
1700446543
1700446544 public static<E extends Enum<E>>EnumSet<E>allOf(Class<E>elementType){
1700446545
1700446546 //生成一个空EnumSet
1700446547
1700446548 EnumSet<E>result=noneOf(elementType);
1700446549
1700446550 //加入所有的枚举项
1700446551
1700446552 result.addAll();
1700446553
1700446554 return result;
1700446555
1700446556 }
1700446557
1700446558 allOf通过noneOf方法首先生成一个EnumSet对象,然后把所有的枚举项都加进去,问题可能就出在EnumSet的生成上了,我们来看noneOf的代码:
1700446559
1700446560 public static<E extends Enum<E>>EnumSet<E>noneOf(Class<E>elementType){
1700446561
1700446562 //获得所有枚举项
[ 上一页 ]  [ :1.700446513e+09 ]  [ 下一页 ]