Package org.apache.commons.beanutils

## Class BasicDynaClass

- java.lang.Object
- - org.apache.commons.beanutils.BasicDynaClass

All Implemented Interfaces:
  `java.io.Serializable`, `DynaClass`

Direct Known Subclasses:
  `LazyDynaClass`

    public class BasicDynaClass
    extends java.lang.Object
    implements DynaClass, java.io.Serializable

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.

Version:
  $Id$
See Also:
  Serialized Form

### Field Summary

Fields
`protected java.lang.reflect.Constructor<?>` `constructor` The constructor of the `dynaBeanClass` that we will use for creating new instances.
`protected static java.lang.Class<?>[]` `constructorTypes` The method signature of the constructor we will use to create new DynaBean instances.
`protected java.lang.Object[]` `constructorValues` The argument values to be passed to the constructore we will use to create new DynaBean instances.
`protected java.lang.Class<?>` `dynaBeanClass` The `DynaBean` implementation class we will use for creating new instances.
`protected java.lang.String` `name` The "name" of this DynaBean class.
`protected DynaProperty[]` `properties` The set of dynamic properties that are part of this DynaClass.
`protected java.util.HashMap<java.lang.String,​DynaProperty>` `propertiesMap` The set of dynamic properties that are part of this DynaClass, keyed by the property name.

### Constructor Summary

Constructors
`BasicDynaClass()` Construct a new BasicDynaClass with default parameters.
`BasicDynaClass​(java.lang.String name, java.lang.Class<?> dynaBeanClass)` Construct a new BasicDynaClass with the specified parameters.
`BasicDynaClass​(java.lang.String name, java.lang.Class<?> dynaBeanClass, DynaProperty[] properties)` Construct a new BasicDynaClass with the specified parameters.

### Method Summary

All Methods Instance Methods Concrete Methods
`java.lang.Class<?>` `getDynaBeanClass()` Return the Class object we will use to create new instances in the `newInstance()` method.
`DynaProperty[]` `getDynaProperties()` Return an array of `ProperyDescriptors` for the properties currently defined in this DynaClass.
`DynaProperty` `getDynaProperty​(java.lang.String name)` Return a property descriptor for the specified property, if it exists; otherwise, return `null`.
`java.lang.String` `getName()` Return the name of this DynaClass (analogous to the `getName()` method of `java.lang.Class</code), which allows the same <code>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​(java.lang.Class<?> dynaBeanClass)` Set the Class object we will use to create new instances in the `newInstance()` method.
`protected void` `setProperties​(DynaProperty[] properties)` Set 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 Detail

#### constructor

    protected transient java.lang.reflect.Constructor<?> constructor

The constructor of the `dynaBeanClass` that we will use for creating new instances.

#### constructorTypes

    protected static java.lang.Class<?>[] constructorTypes

The method signature of the constructor we will use to create new DynaBean instances.

#### constructorValues

    protected java.lang.Object[] constructorValues

The argument values to be passed to the constructore we will use to create new DynaBean instances.

#### dynaBeanClass

    protected java.lang.Class<?> dynaBeanClass

The `DynaBean` implementation class we will use for creating new instances.

#### name

    protected java.lang.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 java.util.HashMap<java.lang.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 Detail

#### BasicDynaClass

    public BasicDynaClass()

Construct a new BasicDynaClass with default parameters.

#### BasicDynaClass

    public BasicDynaClass​(java.lang.String name,
                          java.lang.Class<?> dynaBeanClass)

Construct a new BasicDynaClass with the specified parameters.

Parameters:
  `name` - Name of this DynaBean class
  `dynaBeanClass` - The implementation class for new instances

#### BasicDynaClass

    public BasicDynaClass​(java.lang.String name,
                          java.lang.Class<?> dynaBeanClass,
                          DynaProperty[] properties)

Construct a new BasicDynaClass with the specified parameters.

Parameters:
  `name` - Name of this DynaBean class
  `dynaBeanClass` - The implementation class for new intances
  `properties` - Property descriptors for the supported properties

### Method Detail

#### getName

    public java.lang.String getName()

Return the name of this DynaClass (analogous to the `getName()` method of `java.lang.Class</code), which allows the same <code>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

#### getDynaProperty

    public DynaProperty getDynaProperty​(java.lang.String name)

Return 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:
  `java.lang.IllegalArgumentException` - if no property name is specified

#### getDynaProperties

    public DynaProperty[] getDynaProperties()

Return an array of `ProperyDescriptors` 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

#### newInstance

    public DynaBean newInstance()
                         throws java.lang.IllegalAccessException,
                                java.lang.InstantiationException

Instantiate and return a new DynaBean instance, associated with this DynaClass.

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

#### getDynaBeanClass

    public java.lang.Class<?> getDynaBeanClass()

Return 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`

#### setDynaBeanClass

    protected void setDynaBeanClass​(java.lang.Class<?> dynaBeanClass)

Set 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:
  `java.lang.IllegalArgumentException` - if the specified Class does not implement the `DynaBean` interface

#### setProperties

    protected void setProperties​(DynaProperty[] properties)

Set the list of dynamic properties supported by this DynaClass.

Parameters:
  `properties` - List of dynamic properties to be supported