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

清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
原文地址:https://www.cnblogs.com/hello-yz/p/5737134.html