• 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的方法;

    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    poj1179 Polygon
    poj2677 Tour
    MariaDB10多实例--mysqld_multi
    MariaDB10源码安装
    linux下php+freetds连接SQL server2012
    MariaDB yum安装
    mongoDB yum安装
    pxe 引导clonezilla live万能备份与还原
    (转) pppd 中文man页面
    Unix-like DisplayManager/LoginManager/WindowManager
  • 原文地址:https://www.cnblogs.com/hello-yz/p/5737134.html
Copyright © 2020-2023  润新知