Java examples for Reflection:Setter
Returns a setter method for a given property, no matter if the method is visible or hidden or if it is declared in the given class or in a superclass or implemented interface.
/*//from w w w . j av a2 s. co m * Copyright (c) 2012 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * HUMBOLDT EU Integrated Project #030962 * Data Harmonisation Panel <http://www.dhpanel.eu> */ //package com.java2s; import java.lang.reflect.Method; public class Main { /** * Returns a setter method for a given property, no matter if the method is * visible or hidden or if it is declared in the given class or in a * superclass or implemented interface. * * @param c the class which would contain the setter method * @param property the property * @param propertyType the property's type * @return the setter or null if there is no setter for this property */ public static Method findDeepSetter(Class<?> c, String property, Class<?> propertyType) { if (c == Object.class || c == null) { return null; } char[] propertyNameArr = property.toCharArray(); propertyNameArr[0] = Character.toUpperCase(propertyNameArr[0]); String setterName = "set" + new String(propertyNameArr); //$NON-NLS-1$ Method result = null; // search visible and hidden methods in this class Method[] methods = c.getDeclaredMethods(); for (Method m : methods) { if (m.getName().equals(setterName) && m.getParameterTypes().length == 1 && (propertyType == null || m.getParameterTypes()[0] .isAssignableFrom(propertyType))) { result = m; break; } } // search superclass and interfaces if (result == null) { result = findDeepSetter(c.getSuperclass(), property, propertyType); if (result == null) { Class<?>[] interfaces = c.getInterfaces(); for (Class<?> inter : interfaces) { result = findDeepSetter(inter, property, propertyType); if (result != null) { break; } } } } return result; } }