工厂模式-以EnumSet源码为例

java.Util.EnumSet

public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, java.io.Serializable
{
    final Class<E> elementType;
    final Enum[] universe; 

    EnumSet(Class<E>elementType, Enum[] universe) {
        this.elementType = elementType;
        this.universe    = universe;
    }

  public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) {
         EnumSet<E> result = noneOf(elementType);
         result.addAll();
         return result;
        }
   public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {      
       Enum[] universe = getUniverse(elementType);           
         if (universe == null)                
                throw new ClassCastException(elementType + " not an enum");            
         if (universe.length <= 64)               
                 return new RegularEnumSet<E>(elementType, universe);            
         else                
                return new JumboEnumSet<E>(elementType, universe);        
        }
} 
    
class RegularEnumSet<E extends Enum<E>> extends EnumSet<E>{    
    RegularEnumSet(Class<E>elementType, Enum[] universe) {
            super(elementType, universe);
        }
}
class JumboEnumSet<E extends Enum<E>> extends EnumSet<E>{
    JumboEnumSet(Class<E>elementType, Enum[] universe) {
            super(elementType, universe);
            elements = new long[(universe.length + 63) >>> 6];
        }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值