Package org.apache.commons.beanutils2

# Class BasicDynaClass

java.lang.Object
org.apache.commons.beanutils2.BasicDynaClass

All Implemented Interfaces:
  `DynaClass`

Direct Known Subclasses:
  `LazyDynaClass`

public class BasicDynaClass extends Object implements DynaClass

Minimal implementation of the `DynaClass` interface. Can be used as a convenience base class for more sophisticated implementations.

IMPLEMENTATION NOTE - The `DynaBean` implementation class supplied to our constructor MUST have a one-argument constructor of its own that accepts a `DynaClass`. This is used to associate the DynaBean instance with this DynaClass.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Constructor<?>`
  `constructor`
  The constructor of the `dynaBeanClass` that we will use for creating new instances.
  `protected Object[]`
  `constructorValues`
  The argument values to be passed to the constructor we will use to create new DynaBean instances.
  `protected Class<?>`
  `dynaBeanClass`
  The `DynaBean` implementation class we will use for creating new instances.
  `protected String`
  `name`
  The "name" of this DynaBean class.
  `protected DynaProperty[]`
  `properties`
  The set of dynamic properties that are part of this DynaClass.
  `protected HashMap<String,DynaProperty>`
  `propertiesMap`
  The set of dynamic properties that are part of this DynaClass, keyed by the property name.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BasicDynaClass()`
  Constructs a new BasicDynaClass with default parameters.
  `BasicDynaClass(String name, Class<?> dynaBeanClass)`
  Constructs a new BasicDynaClass with the specified parameters.
  `BasicDynaClass(String name, Class<?> dynaBeanClass, DynaProperty[] properties)`
  Constructs a new BasicDynaClass with the specified parameters.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Class<?>`
  `getDynaBeanClass()`
  Gets the Class object we will use to create new instances in the `newInstance()` method.
  `DynaProperty[]`
  `getDynaProperties()`
  Return an array of `PropertyDescriptor` for the properties currently defined in this DynaClass.
  `DynaProperty`
  `getDynaProperty(String name)`
  Gets a property descriptor for the specified property, if it exists; otherwise, return `null`.
  `String`
  `getName()`
  Gets the name of this DynaClass (analogous to the `getName()` method of `Class`, which allows the same `DynaClass` implementation class to support different dynamic classes, with different sets of properties.
  `DynaBean`
  `newInstance()`
  Instantiate and return a new DynaBean instance, associated with this DynaClass.
  `protected void`
  `setDynaBeanClass(Class<?> dynaBeanClass)`
  Sets the Class object we will use to create new instances in the `newInstance()` method.
  `protected void`
  `setProperties(DynaProperty[] properties)`
  Sets the list of dynamic properties supported by this DynaClass.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### constructor

    protected transient Constructor<?> constructor
    The constructor of the `dynaBeanClass` that we will use for creating new instances.

  - ### constructorValues

    protected Object[] constructorValues
    The argument values to be passed to the constructor we will use to create new DynaBean instances.

  - ### dynaBeanClass

    protected Class<?> dynaBeanClass
    The `DynaBean` implementation class we will use for creating new instances.

  - ### name

    protected String name
    The "name" of this DynaBean class.

  - ### properties

    protected DynaProperty[] properties
    The set of dynamic properties that are part of this DynaClass.

  - ### propertiesMap

    protected HashMap<String,DynaProperty> propertiesMap
    The set of dynamic properties that are part of this DynaClass, keyed by the property name. Individual descriptor instances will be the same instances as those in the `properties` list.

- ## Constructor Details

  - ### BasicDynaClass

    public BasicDynaClass()
    Constructs a new BasicDynaClass with default parameters.

  - ### BasicDynaClass

    public BasicDynaClass(String name, Class<?> dynaBeanClass)
    Constructs a new BasicDynaClass with the specified parameters.
    Parameters:
      `name` - Name of this DynaBean class
      `dynaBeanClass` - The implementation class for new instances

  - ### BasicDynaClass

    public BasicDynaClass(String name, Class<?> dynaBeanClass, DynaProperty[] properties)
    Constructs a new BasicDynaClass with the specified parameters.
    Parameters:
      `name` - Name of this DynaBean class
      `dynaBeanClass` - The implementation class for new instances
      `properties` - Property descriptors for the supported properties

- ## Method Details

  - ### getDynaBeanClass

    public Class<?> getDynaBeanClass()
    Gets the Class object we will use to create new instances in the `newInstance()` method. This Class MUST implement the `DynaBean` interface.
    Returns:
      The class of the `DynaBean`

  - ### getDynaProperties

    public DynaProperty[] getDynaProperties()

    Return an array of `PropertyDescriptor` for the properties currently defined in this DynaClass. If no properties are defined, a zero-length array will be returned.

    FIXME - Should we really be implementing `getBeanInfo()` instead, which returns property descriptors and a bunch of other stuff?

    Specified by:
      `getDynaProperties` in interface `DynaClass`
    Returns:
      the set of properties for this DynaClass

  - ### getDynaProperty

    public DynaProperty getDynaProperty(String name)
    Gets a property descriptor for the specified property, if it exists; otherwise, return `null`.
    Specified by:
      `getDynaProperty` in interface `DynaClass`
    Parameters:
      `name` - Name of the dynamic property for which a descriptor is requested
    Returns:
      The descriptor for the specified property
    Throws:
      `IllegalArgumentException` - if no property name is specified

  - ### getName

    public String getName()
    Gets the name of this DynaClass (analogous to the `getName()` method of `Class`, which allows the same `DynaClass` implementation class to support different dynamic classes, with different sets of properties.
    Specified by:
      `getName` in interface `DynaClass`
    Returns:
      the name of the DynaClass

  - ### newInstance

    public DynaBean newInstance() throws IllegalAccessException, InstantiationException
    Instantiate and return a new DynaBean instance, associated with this DynaClass.
    Specified by:
      `newInstance` in interface `DynaClass`
    Returns:
      A new `DynaBean` instance
    Throws:
      `IllegalAccessException` - if the Class or the appropriate constructor is not accessible
      `InstantiationException` - if this Class represents an abstract class, an array class, a primitive type, or void; or if instantiation fails for some other reason

  - ### setDynaBeanClass

    protected void setDynaBeanClass(Class<?> dynaBeanClass)
    Sets the Class object we will use to create new instances in the `newInstance()` method. This Class MUST implement the `DynaBean` interface.
    Parameters:
      `dynaBeanClass` - The new Class object
    Throws:
      `IllegalArgumentException` - if the specified Class does not implement the `DynaBean` interface

  - ### setProperties

    protected void setProperties(DynaProperty[] properties)
    Sets the list of dynamic properties supported by this DynaClass.
    Parameters:
      `properties` - List of dynamic properties to be supported