Java examples for Reflection:Java Bean
Sets the value of the specified property in given bean
/**/*from w w w .jav a 2s . co m*/ * JLibs: Common Utilities for Java * Copyright (C) 2009 Santhosh Kumar T <santhosh.tekuri@gmail.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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. */ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Locale; public class Main{ public static void main(String[] argv) throws Exception{ Object bean = "java2s.com"; String property = "java2s.com"; Object value = "java2s.com"; setProperty(bean,property,value); } /** prefix used by non-boolean getter methods */ public static final String GET = "get"; /** prefix used by boolean getter methods */ public static final String IS = "is"; /** prefix used by setter methods */ public static final String SET = "set"; /** * Sets the value of the specified <code>property</code> in given <code>bean</code> * * @param bean bean object * @param property property name whose value needs to be set * @param value value to be set * * @throws InvocationTargetException if method invocation fails * @throws NullPointerException if <code>property</code> is not found in <code>bean</code> or it is readonly property */ public static void setProperty(Object bean, String property, Object value) throws InvocationTargetException { try { getSetterMethod(bean.getClass(), property).invoke(bean, value); } catch (IllegalAccessException ex) { throw new ImpossibleException(ex); // because setter method is public } } /** * Returns setter method for <code>property</code> in specified <code>beanClass</code> * * @param beanClass bean class * @param property name of the property * * @return setter method. null if <code>property</code> is not found, or it is readonly property * * @see #getSetterMethod(Class, String, Class) */ public static Method getSetterMethod(Class<?> beanClass, String property) { Method getter = getGetterMethod(beanClass, property); if (getter == null) return null; else return getSetterMethod(beanClass, property, getter.getReturnType()); } /** * Returns setter method for <code>property</code> in specified <code>beanClass</code> * * @param beanClass bean class * @param property name of the property * @param propertyType type of the property. This is used to compute setter method name. * * @return setter method. null if <code>property</code> is not found, or it is readonly property * * @see #getSetterMethod(Class, String) */ public static Method getSetterMethod(Class<?> beanClass, String property, Class propertyType) { try { return beanClass.getMethod(SET + getMethodSuffix(property), propertyType); } catch (NoSuchMethodException ex) { return null; } } /** * Returns getter method for <code>property</code> in specified <code>beanClass</code> * * @param beanClass bean class * @param property name of the property * * @return getter method. null if <code>property</code> is not found * * @see #getGetterMethod(Class, String, Class) */ public static Method getGetterMethod(Class<?> beanClass, String property) { try { return beanClass.getMethod(GET + getMethodSuffix(property)); } catch (NoSuchMethodException ex1) { try { return beanClass.getMethod(IS + getMethodSuffix(property)); } catch (NoSuchMethodException ex2) { return null; } } } /** * Returns getter method for <code>property</code> in specified <code>beanClass</code> * * @param beanClass bean class * @param property name of the property * @param propertyType type of the property. This is used to compute getter method name. * * @return getter method. null if <code>property</code> is not found * * @see #getGetterMethod(Class, String) */ public static Method getGetterMethod(Class<?> beanClass, String property, Class propertyType) { try { try { if (propertyType == boolean.class) return beanClass.getMethod(IS + getMethodSuffix(property)); } catch (NoSuchMethodException ignore) { // ignore } return beanClass.getMethod(GET + getMethodSuffix(property)); } catch (NoSuchMethodException ex) { return null; } } public static String getMethodSuffix(String property) { switch (property.length()) { case 0: throw new IllegalArgumentException("invalid property name: " + property); case 1: return property.toUpperCase(Locale.ENGLISH); default: char char0 = property.charAt(0); boolean upper0 = Character.isUpperCase(char0); char char1 = property.charAt(1); boolean upper1 = Character.isUpperCase(char1); if (upper0 && upper1) // XCoordinate ==> getXCordinate() return property; if (!upper0 && !upper1) // xcoordinate ==> getXcoordinate() return Character.toUpperCase(char0) + property.substring(1); if (!upper0 && upper1) // xCoordinate ==> getxCoordinate() return property; throw new IllegalArgumentException("invalid property name: " + property); } } }