Here you can find the source of getAnnotation(Enum> enumConstant, Class annotationClass)
public static <A extends Annotation> A getAnnotation(Enum<?> enumConstant, Class<A> annotationClass)
//package com.java2s; /**/*from w w w . ja va2 s . c o m*/ * eobjects.org AnalyzerBeans * Copyright (C) 2010 eobjects.org * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; public class Main { /** * A lock used at various points when calling Class.getAnnotation(...) or * Field.getAnnotation(...), since it seems there is a deadlock issue in the * Sun JVM when calling this method in a multithreaded environment! */ public static final Object ANNOTATION_REFLECTION_LOCK = new Object(); public static <A extends Annotation> A getAnnotation(Enum<?> enumConstant, Class<A> annotationClass) { try { Field field = enumConstant.getClass().getDeclaredField(enumConstant.name()); return getAnnotation(field, annotationClass); } catch (Exception e) { throw new IllegalStateException(e); } } public static <A extends Annotation> A getAnnotation(AnnotatedElement element, Class<A> annotationClass) { synchronized (ANNOTATION_REFLECTION_LOCK) { return element.getAnnotation(annotationClass); } } }