Java examples for Reflection:Setter
Invokes a public setter for a property
/*//from w ww. j av a 2 s . com * 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.InvocationTargetException; import java.lang.reflect.Method; public class Main { /** * Invokes a public setter for a property * * @param bean the object to invoke the public setter on * @param propertyName the name of the property that shall be updated * @param value the value passed to the setter * @throws IllegalArgumentException if the argument's type is invalid * @throws IllegalAccessException if the setter is not accessible * @throws InvocationTargetException if the setter throws an exception * @throws NoSuchMethodException if there is no setter for this property */ public static void setProperty(Object bean, String propertyName, Object value) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { Method setter = findSetter(bean.getClass(), propertyName, value.getClass()); if (setter == null) { throw new NoSuchMethodException("There is " + //$NON-NLS-1$ "no setter for property " + propertyName); //$NON-NLS-1$ } invokeSetter(bean, setter, value); } /** * Returns a public setter method for a given property * * @param c the class which would contain the setter method * @param property the property * @param propertyType the property's type * @return the public setter or null if there is no setter for this property */ public static Method findSetter(Class<?> c, String property, Class<?> propertyType) { char[] propertyNameArr = property.toCharArray(); propertyNameArr[0] = Character.toUpperCase(propertyNameArr[0]); String setterName = "set" + new String(propertyNameArr); //$NON-NLS-1$ Method result = null; Method[] methods = c.getMethods(); for (Method m : methods) { if (m.getName().equals(setterName) && m.getParameterTypes().length == 1 && (propertyType == null || m.getParameterTypes()[0] .isAssignableFrom(propertyType))) { result = m; break; } } return result; } /** * Invokes a setter method on a given bean * * @param bean the object to invoke the getter on * @param setter the setter method * @param value the value to set * @throws IllegalArgumentException if the argument's type is invalid * @throws IllegalAccessException if the setter is not accessible * @throws InvocationTargetException if the setter throws an exception */ private static void invokeSetter(Object bean, Method setter, Object value) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { boolean accessible = setter.isAccessible(); setter.setAccessible(true); try { setter.invoke(bean, value); } finally { setter.setAccessible(accessible); } } }