public static List<String> getMutablePropertyNamesOptional(
        Class<?> beanClass)
    {
        List<PropertyDescriptor> propertyDescriptors =
            getPropertyDescriptorsOptional(beanClass);
        List<String> result = new ArrayList<String>();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors)
        {
            String propertyName = propertyDescriptor.getName();
            Method readMethod = 
                getReadMethodOptional(beanClass, propertyName);
            Method writeMethod = 
                getWriteMethodOptional(beanClass, propertyName);
            if (readMethod != null && writeMethod != null)
            {
                result.add(propertyName);
            }
        }
        return Collections.unmodifiableList(result);
    }
public static List < String > getMutablePropertyNamesOptional ( Class < ? > beanClass ) { List < PropertyDescriptor > propertyDescriptors = getPropertyDescriptorsOptional ( beanClass ) ; List < String > result = new ArrayList < String > ( ) ; for ( PropertyDescriptor propertyDescriptor : propertyDescriptors ) { String propertyName = propertyDescriptor . getName ( ) ; Method readMethod = getReadMethodOptional ( beanClass , propertyName ) ; Method writeMethod = getWriteMethodOptional ( beanClass , propertyName ) ; if ( readMethod != null && writeMethod != null ) { result . add ( propertyName ) ; } } return Collections . unmodifiableList ( result ) ; }
Returns an unmodifiable list of all property names of the given bean
class for which a read method and a write method exists. If the bean
class can not be introspected, an empty list will be returned.

@param beanClass The bean class
@return The property names