/** * retourne une map contenant en clé le getter, et en valeur le setter. La map contient des * association de getter setter concernant le meme champs. ex: sur une classe Personne possédant * les méthodes suivantes: getPhone() setFirstName(...) getFirstName(); setLastName(...) * * @return */ public static HashMap<Method, Method> findGettersAndSetters(final Class<?> clazz) { final HashMap<Method, Method> map = new HashMap<Method, Method>(); final HashMap<String, Method> getters = new HashMap<String, Method>(); final HashMap<String, Method> setters = new HashMap<String, Method>(); for (final Method method : clazz.getMethods()) { if (ReflectionUtils.isGetter(method)) { getters.put(method.getName().replaceFirst("get", ""), method); } else if (ReflectionUtils.isSetter(method)) { setters.put(method.getName().replaceFirst("set", ""), method); } } for (final Entry<String, Method> entry : getters.entrySet()) { if (setters.containsKey(entry.getKey())) { final Method setter = setters.get(entry.getKey()); final Method getter = entry.getValue(); if (setter.getParameterTypes()[0].equals(getter.getReturnType())) { map.put(getter, setter); } } } return map; }
/** * Retourne la liste des champs accéssible via des getter et setter.<br> * La notion de champs peut etre virtuelle.<br> * Par ex si une class a une methode getName et une autre setName,<br> * meme si elle ne possède pas de champs name, Name sera retournée dans la liste.<br> * * @param clazz * @return */ public static List<String> findFieldsNameWithGetterAndSetter(final Class<?> clazz) { final List<String> list = new ArrayList<String>(); for (final Method getter : ReflectionUtils.findGettersAndSetters(clazz).keySet()) { list.add(getter.getName().replaceFirst("get", "")); } return list; }
public static Method findSetter(final String fieldName, final Class<?> clazz) throws NoSuchMethodException { Preconditions.checkNotNull(fieldName, "fieldName cannot be null."); Preconditions.checkNotNull(clazz, "fieldName cannot be clazz."); final String getterName = "set" + StringUtils.capitalize(fieldName); for (final Method method : clazz.getMethods()) { if (ReflectionUtils.isSetter(method) && getterName.equals(method.getName())) { return method; } } throw new NoSuchMethodException( "no method " + getterName + " in class " + clazz.getSimpleName()); }