Java: access to bean methods of type of object through reflection

Is this a suitable way to access the properties of a bean without knowing / not caring about its exact type? (Or is there a built-in method that does this already?) Is there a suitable throw exception when the property does not exist or is not available?

static private Object getBeanPropertyValue(Object bean, String propertyName) { // access a no-arg method through reflection // following bean naming conventions try { Method m = bean.getClass().getMethod( "get" +propertyName.substring(0,1).toUpperCase() +propertyName.substring(1) , null); return m.invoke(bean); } catch (SecurityException e) { // (gulp) -- swallow exception and move on } catch (NoSuchMethodException e) { // (gulp) -- swallow exception and move on } catch (IllegalArgumentException e) { // (gulp) -- swallow exception and move on } catch (IllegalAccessException e) { // (gulp) -- swallow exception and move on } catch (InvocationTargetException e) { // (gulp) -- swallow exception and move on } return null; // it would be better to throw an exception, wouldn't it? } 
+4
source share
3 answers

If you cannot use Commons BeanUtils, you can get there with jre classes

java.beans.Introspector

 BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass()); PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors(); for(PropertyDescriptor pd : descriptors) { if(pd.getName().equals(propertyName) { return pd.getReadMethod().invoke(bean, (Object[])null); } } 
+3
source

A wrapper such as Commons BeanUtils would be nice if you don't mind third-party addiction. Otherwise, I would suggest looking at the Java BeanInfo class to provide what you need.

An invalid IllegalArgumentException may be reasonable, but in fact almost everything will be better than just swallowing the exception.

+3
source

Umm ... this will not handle boolean values ​​(eg, "isActive ()") or nested / indexed properties.

I suggest you take a look at Commons BeanUtils instead of trying to write it yourself.

BeanUtils.getProperty () does what you want. Does not swallow exceptions :-)

+2
source

All Articles