how to read object attribute dynamically in java?

后端 未结 5 1181
清歌不尽
清歌不尽 2021-02-07 12:38

Is there any way to read and print the object attribute dynamically(Java) ? for example if I have following object

public class A{
  int age ;
  String name;
           


        
5条回答
  •  谎友^
    谎友^ (楼主)
    2021-02-07 12:55

    Using org.apache.commons.beanutils.PropertyUtils we can do this. If the proper getters and setters are defined for the bean we can also dynamically set the value:

    import org.apache.commons.beanutils.PropertyUtils;
    import java.beans.PropertyDescriptor;
    
    public class PropertyDescriptorTest {
    
        public static void main(String[] args) {
    
            // Declaring and setting values on the object
            AnyObject anObject = new AnyObject();
            anObject.setIntProperty(1);
            anObject.setLongProperty(234L);
            anObject.setStrProperty("string value");
    
            // Getting the PropertyDescriptors for the object
            PropertyDescriptor[] objDescriptors = PropertyUtils.getPropertyDescriptors(anObject);
    
            // Iterating through each of the PropertyDescriptors
            for (PropertyDescriptor objDescriptor : objDescriptors) {
                try {
                    String propertyName = objDescriptor.getName();
                    Object propType = PropertyUtils.getPropertyType(anObject, propertyName);
                    Object propValue = PropertyUtils.getProperty(anObject, propertyName);
    
                    // Printing the details
                    System.out.println("Property="+propertyName+", Type="+propType+", Value="+propValue);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
        }
    
    }
    

    To set the value of a particular property:

    // Here we have to make sure the value is
    // of the same type as propertyName
    PropertyUtils.setProperty(anObject, propertyName, value);
    

    Output will be:

    Property=class, Type=class java.lang.Class, Value=class genericTester.AnyObject
    Property=intProperty, Type=int, Value=1
    Property=longProperty, Type=class java.lang.Long, Value=234
    Property=strProperty, Type=class java.lang.String, Value=string value
    

提交回复
热议问题