zoukankan      html  css  js  c++  java
  • Java Enum

    解决之前遗留的问题之一:Java Enum的理解。

    最近在研究Shiro的过程中,碰到DefaultFilter的源码,是enum形式的。之前没见过这样的写法”。

    public enum DefaultFilter {
    
        anon(AnonymousFilter.class),
        authc(FormAuthenticationFilter.class),
        authcBasic(BasicHttpAuthenticationFilter.class),
        logout(LogoutFilter.class),
        noSessionCreation(NoSessionCreationFilter.class),
        perms(PermissionsAuthorizationFilter.class),
        port(PortFilter.class),
        rest(HttpMethodPermissionFilter.class),
        roles(RolesAuthorizationFilter.class),
        ssl(SslFilter.class),
        user(UserFilter.class);
    
        private final Class<? extends Filter> filterClass;
    
        private DefaultFilter(Class<? extends Filter> filterClass) {
            this.filterClass = filterClass;
        }
    
        public Filter newInstance() {
            return (Filter) ClassUtils.newInstance(this.filterClass);
        }
    
        public Class<? extends Filter> getFilterClass() {
            return this.filterClass;
        }
    
        public static Map<String, Filter> createInstanceMap(FilterConfig config) {
            Map<String, Filter> filters = new LinkedHashMap<String, Filter>(values().length);
            for (DefaultFilter defaultFilter : values()) {
                Filter filter = defaultFilter.newInstance();
                if (config != null) {
                    try {
                        filter.init(config);
                    } catch (ServletException e) {
                        String msg = "Unable to correctly init default filter instance of type " +
                                filter.getClass().getName();
                        throw new IllegalStateException(msg, e);
                    }
                }
                filters.put(defaultFilter.name(), filter);
            }
            return filters;
        }
    }

    相关博客:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html

    1. enum本身无法再继承

    2. enum可视为class的一种

    3. enum默认有valueOf(),values()方法,其实类似于类的.class,具体可能深究JVM

    4. enum相等用==

    5. Java enum在经过编译后也会生成class文件,而且其经过反编译之后生成的类实际上继承了java.lang.Enum<E>

    6. enum的实例必须提前列举! enum无法用构造函数new,构造函数是private的

    7. 既然enum不能实例化,那么enum中的public方法不能使用(除了列举的现成的enum),只能使用public static的方法;

    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    java学习(4):第一个Java程序(Hello world)
    java学习(3):字符集和字符编码的区别
    java学习(2):二进制、十进制、原码、反码、补码
    Java学习(1):JRE和JDK
    缓存
    关联表查询
    男0女1
    嵌套查询
    定义别名
    增删改查
  • 原文地址:https://www.cnblogs.com/hello-yz/p/5737134.html
Copyright © 2011-2022 走看看