Package org.apache.commons.beanutils

## Class BasicDynaBean

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

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

    public class BasicDynaBean
    extends java.lang.Object
    implements DynaBean, java.io.Serializable

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

IMPLEMENTATION NOTE - Instances of this class that are accessed from multiple threads simultaneously need to be synchronized.

IMPLEMENTATION NOTE - Instances of this class can be successfully serialized and deserialized ONLY if all property values are `Serializable`.

Version:
  $Id$
See Also:
  Serialized Form

### Field Summary

Fields
`protected DynaClass` `dynaClass` The `DynaClass` "base class" that this DynaBean is associated with.
`protected java.util.HashMap<java.lang.String,​java.lang.Object>` `values` The set of property values for this DynaBean, keyed by property name.

### Constructor Summary

Constructors
`BasicDynaBean​(DynaClass dynaClass)` Construct a new `DynaBean` associated with the specified `DynaClass` instance.

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `contains​(java.lang.String name, java.lang.String key)` Does the specified mapped property contain a value for the specified key value?
`java.lang.Object` `get​(java.lang.String name)` Return the value of a simple property with the specified name.
`java.lang.Object` `get​(java.lang.String name, int index)` Return the value of an indexed property with the specified name.
`java.lang.Object` `get​(java.lang.String name, java.lang.String key)` Return the value of a mapped property with the specified name, or `null` if there is no value for the specified key.
`DynaClass` `getDynaClass()` Return the `DynaClass` instance that describes the set of properties available for this DynaBean.
`protected DynaProperty` `getDynaProperty​(java.lang.String name)` Return the property descriptor for the specified property name.
`java.util.Map<java.lang.String,​java.lang.Object>` `getMap()` Return a Map representation of this DynaBean.
`protected boolean` `isAssignable​(java.lang.Class<?> dest, java.lang.Class<?> source)` Is an object of the source class assignable to the destination class?
`void` `remove​(java.lang.String name, java.lang.String key)` Remove any existing value for the specified key on the specified mapped property.
`void` `set​(java.lang.String name, int index, java.lang.Object value)` Set the value of an indexed property with the specified name.
`void` `set​(java.lang.String name, java.lang.Object value)` Set the value of a simple property with the specified name.
`void` `set​(java.lang.String name, java.lang.String key, java.lang.Object value)` Set the value of a mapped property with the specified name.

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

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

### Field Detail

#### dynaClass

    protected DynaClass dynaClass

The `DynaClass` "base class" that this DynaBean is associated with.

#### values

    protected java.util.HashMap<java.lang.String,​java.lang.Object> values

The set of property values for this DynaBean, keyed by property name.

### Constructor Detail

#### BasicDynaBean

    public BasicDynaBean​(DynaClass dynaClass)

Construct a new `DynaBean` associated with the specified `DynaClass` instance.

Parameters:
  `dynaClass` - The DynaClass we are associated with

### Method Detail

#### getMap

    public java.util.Map<java.lang.String,​java.lang.Object> getMap()

Return a Map representation of this DynaBean. This, for example, could be used in JSTL in the following way to access a DynaBean's `fooProperty`:

- `${myDynaBean.map.fooProperty}`

Returns:
  a Map representation of this DynaBean
Since:
  1.8.0

#### contains

    public boolean contains​(java.lang.String name,
                            java.lang.String key)

Does the specified mapped property contain a value for the specified key value?

Specified by:
  `contains` in interface `DynaBean`
Parameters:
  `name` - Name of the property to check
  `key` - Name of the key to check
Returns:
  `true` if the mapped property contains a value for the specified key, otherwise `false`
Throws:
  `java.lang.IllegalArgumentException` - if there is no property of the specified name

#### get

    public java.lang.Object get​(java.lang.String name)

Return the value of a simple property with the specified name.

Specified by:
  `get` in interface `DynaBean`
Parameters:
  `name` - Name of the property whose value is to be retrieved
Returns:
  The property's value
Throws:
  `java.lang.IllegalArgumentException` - if there is no property of the specified name

#### get

    public java.lang.Object get​(java.lang.String name,
                                int index)

Return the value of an indexed property with the specified name.

Specified by:
  `get` in interface `DynaBean`
Parameters:
  `name` - Name of the property whose value is to be retrieved
  `index` - Index of the value to be retrieved
Returns:
  The indexed property's value
Throws:
  `java.lang.IllegalArgumentException` - if there is no property of the specified name
  `java.lang.IllegalArgumentException` - if the specified property exists, but is not indexed
  `java.lang.IndexOutOfBoundsException` - if the specified index is outside the range of the underlying property
  `java.lang.NullPointerException` - if no array or List has been initialized for this property

#### get

    public java.lang.Object get​(java.lang.String name,
                                java.lang.String key)

Return the value of a mapped property with the specified name, or `null` if there is no value for the specified key.

Specified by:
  `get` in interface `DynaBean`
Parameters:
  `name` - Name of the property whose value is to be retrieved
  `key` - Key of the value to be retrieved
Returns:
  The mapped property's value
Throws:
  `java.lang.IllegalArgumentException` - if there is no property of the specified name
  `java.lang.IllegalArgumentException` - if the specified property exists, but is not mapped

#### getDynaClass

    public DynaClass getDynaClass()

Return the `DynaClass` instance that describes the set of properties available for this DynaBean.

Specified by:
  `getDynaClass` in interface `DynaBean`
Returns:
  The associated DynaClass

#### remove

    public void remove​(java.lang.String name,
                       java.lang.String key)

Remove any existing value for the specified key on the specified mapped property.

Specified by:
  `remove` in interface `DynaBean`
Parameters:
  `name` - Name of the property for which a value is to be removed
  `key` - Key of the value to be removed
Throws:
  `java.lang.IllegalArgumentException` - if there is no property of the specified name

#### set

    public void set​(java.lang.String name,
                    java.lang.Object value)

Set the value of a simple property with the specified name.

Specified by:
  `set` in interface `DynaBean`
Parameters:
  `name` - Name of the property whose value is to be set
  `value` - Value to which this property is to be set
Throws:
  `ConversionException` - if the specified value cannot be converted to the type required for this property
  `java.lang.IllegalArgumentException` - if there is no property of the specified name
  `java.lang.NullPointerException` - if an attempt is made to set a primitive property to null

#### set

    public void set​(java.lang.String name,
                    int index,
                    java.lang.Object value)

Set the value of an indexed property with the specified name.

Specified by:
  `set` in interface `DynaBean`
Parameters:
  `name` - Name of the property whose value is to be set
  `index` - Index of the property to be set
  `value` - Value to which this property is to be set
Throws:
  `ConversionException` - if the specified value cannot be converted to the type required for this property
  `java.lang.IllegalArgumentException` - if there is no property of the specified name
  `java.lang.IllegalArgumentException` - if the specified property exists, but is not indexed
  `java.lang.IndexOutOfBoundsException` - if the specified index is outside the range of the underlying property

#### set

    public void set​(java.lang.String name,
                    java.lang.String key,
                    java.lang.Object value)

Set the value of a mapped property with the specified name.

Specified by:
  `set` in interface `DynaBean`
Parameters:
  `name` - Name of the property whose value is to be set
  `key` - Key of the property to be set
  `value` - Value to which this property is to be set
Throws:
  `ConversionException` - if the specified value cannot be converted to the type required for this property
  `java.lang.IllegalArgumentException` - if there is no property of the specified name
  `java.lang.IllegalArgumentException` - if the specified property exists, but is not mapped

#### getDynaProperty

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

Return the property descriptor for the specified property name.

Parameters:
  `name` - Name of the property for which to retrieve the descriptor
Returns:
  The property descriptor
Throws:
  `java.lang.IllegalArgumentException` - if this is not a valid property name for our DynaClass

#### isAssignable

    protected boolean isAssignable​(java.lang.Class<?> dest,
                                   java.lang.Class<?> source)

Is an object of the source class assignable to the destination class?

Parameters:
  `dest` - Destination class
  `source` - Source class
Returns:
  `true` if the source class is assignable to the destination class, otherwise `false`