zoukankan      html  css  js  c++  java
  • struts2源码感悟

    感觉泛型用得比较多,在ArrayUtils类里面:

    public static <T> Set<T> asSet(T... element) {
            HashSet<T> elements = new HashSet<T>(element.length);
            Collections.addAll(elements, element);
            return elements;
    }
    

    看到Enumeration这个类觉得面生,但又用得不少,翻看源码:

    public interface Enumeration<E> {
    boolean hasMoreElements(); E nextElement();
    }

    ,这个不多做解释,直接翻到Iterator的源码,

    /**
     * An iterator over a collection.  {@code Iterator} takes the place of
     * {@link Enumeration} in the Java Collections Framework.  Iterators
     * differ from enumerations in two ways:
     *       1. Iterators allow the caller to remove elements from the
     *           underlying collection during the iteration with well-defined
     *           semantics.
     *       2. Method names have been improved.
     * 
     * @author  Josh Bloch
     * @see Collection
     * @see ListIterator
     * @see Iterable
     * @since 1.2
     */
    public interface Iterator<E> {
    
        boolean hasNext();
    
        E next();
    
        void remove();
    }
    

    删掉了部分注释,大意是:

    1. Iterator取代了Enumeration,并添加了remove方法;

    2.Iterator对方法名做了优化。

    所以我们可以简单地理解,Enumeration就是Iterator的早期版,但由于遍历确实比Iterator快,所以在不需要删除功能和fail-fast功能的时候,用Enumeration遍历更快。

    网上可看到的信息,还有一个区别是Iterator支持fail-fast,我不清楚,先略过

    再看两段代码,

    public enum Flag{one,more}
    

      &

    public @interface Dic {
        
    	public enum CacheNameEnum{
    		
    		CA_ADMIN("ca_admin"),
    
    		CA_TIME("time");
    		
    		private String mapId;
    
    		public String getMapId() {
    		  return mapId;
    		}
    
    		CacheNameEnum(String mapId) {
    		  this.mapId = mapId;
    		}
    	}
    
        CacheNameEnum[] key();
        
        boolean cache() default false;
        
        String handler() default "";
    }
    

      

    这里出现了一个enum,那它和Enumeration有什么区别和联系呢?

    enum是一种特殊的数据类型,Enumeration是一个接口类。先说说enum怎么使用吧,

    tips:enum不能作为包名。

    public enum EnumTest {
    	
    	MONDAY,TUESDAY;
    	
    	public void doPost(){
    		
    	}
    	
    }
    

    1、enum可以替代class声明一个类,也可放在类的内部;

    2、enum声明的常量最好大写,逗号分隔;

    3、不另外定义方法,可以不在末尾加分号,定义方法需要加分号;

    public class EnumTest {
    	
    	enum Day {
    		
    		MONDAY,TUESDAY;
    		
    		public String name;
    		
    		public void doPost(){
    			System.out.println("name: " + this.name);
    		}
    		
    	}
    	
    	public static void main(String[] args){
    		Day.MONDAY.doPost();
    		System.out.println(Day.MONDAY.ordinal());
              System.out.println(Day.MONDAY.name()); System.out.println(Day.MONDAY); } }

    ,打印结果:

    使用方法介绍完毕,大致明了,总结下。

    1、enum类型实际上继承自Enum类,是一种限定对象实例个数的类类型;

    2、Enum类自带两个属性,ordinal和name,name是定义的常量的名称,oridinal同常量定义顺序,从0开始;

    3、可以自定义属性,定义构造方法,如Dic类。

    for(Day day : EnumSet.range(Day.MONDAY,Day.THURSDAY)) { 
      System.out.println(day); 
    }
    

     可以用EnumSet遍历指定段的Enum对象。

    java1.7的switch语句加入了对enum的支持,我大胆猜测,内部实现应该是比对enum的oridinal值。

    这篇文章写得贼好,特别深: https://blog.csdn.net/javazejian/article/details/71333103

    里面讲到单例模式的实现,写得特别好,我打算另外写篇博客整理下,这里就不赘述了,主要代码就是:

    /**
     * Created by wuzejian on 2017/5/9.
     * 枚举单例
     */
    public enum  SingletonEnum {
        INSTANCE;
        private String name;
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name = name;
        }
    }
    

     但这篇文章讲到,反编译enum类的代码后,可以看到继承了Enum类,java1.7上没有。

  • 相关阅读:
    Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
    UnitOfWork模式和Repository模式[转]
    倾情奉献:开源企业类库(EntLib)大分享
    Spring.NET企业架构实践之Nhibernate + WCF + ASP.NET MVC + NVelocity 对PetShop4.0重构(一)——架构设计
    WCF服务
    EA使用教程
    第三方支付接口,银行接口(附下载),third party bank interface
    ASP.NET 开发 WAP 网站
    开源软件Mono框架和架构
    wcf asp.net
  • 原文地址:https://www.cnblogs.com/cherishBlueSky/p/9178885.html
Copyright © 2011-2022 走看看