Here you can find the source of setFieldForAnnotation(Object target, Class extends Annotation> annotation, Object value)
public static void setFieldForAnnotation(Object target, Class<? extends Annotation> annotation, Object value)
//package com.java2s; /************************************************************************************** * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ import java.lang.annotation.Annotation; import java.lang.reflect.*; import java.util.*; public class Main { public static void setFieldForAnnotation(Object target, Class<? extends Annotation> annotation, Object value) { boolean found = setFieldForAnnotation(target, annotation, value, target.getClass()); if (!found) { Class superClass = target.getClass().getSuperclass(); while (!found) { found = setFieldForAnnotation(target, annotation, value, superClass); if (!found) { superClass = superClass.getSuperclass(); }/*from www . j a va 2 s .c o m*/ if (superClass == Object.class || superClass == null) { break; } } } } private static boolean setFieldForAnnotation(Object target, Class<? extends Annotation> annotation, Object value, Class currentClass) { boolean found = false; for (Field field : currentClass.getDeclaredFields()) { if (isAnnotationListed(annotation, field.getDeclaredAnnotations())) { field.setAccessible(true); try { field.set(target, value); } catch (IllegalAccessException e) { throw new RuntimeException("Failed to set field " + field + " on class " + currentClass.getName() + ": " + e.getMessage(), e); } return true; } } return found; } public static boolean isAnnotationListed(Class<? extends Annotation> annotationClass, Annotation[] annotations) { return !getAnnotations(annotationClass, annotations).isEmpty(); } public static List<Annotation> getAnnotations(Class<? extends Annotation> annotationClass, Annotation[] annotations) { List<Annotation> result = null; for (Annotation annotation : annotations) { if (annotation.annotationType() == annotationClass) { if (result == null) { result = new ArrayList<Annotation>(); } result.add(annotation); } } if (result == null) { return Collections.emptyList(); } return result; } }