Package org.apache.commons.beanutils

## Interface MutableDynaClass

All Superinterfaces:
  `DynaClass`

All Known Implementing Classes:
  `LazyDynaClass`, `LazyDynaMap`

    public interface MutableDynaClass
    extends DynaClass

A specialized extension to `DynaClass` that allows properties to be added or removed dynamically.

WARNING - No guarantees that this will be in the final APIs ... it's here primarily to preserve some concepts that were in the original proposal for further discussion.

Version:
  $Id$

### Method Summary

All Methods Instance Methods Abstract Methods
`void` `add​(java.lang.String name)` Add a new dynamic property with no restrictions on data type, readability, or writeability.
`void` `add​(java.lang.String name, java.lang.Class<?> type)` Add a new dynamic property with the specified data type, but with no restrictions on readability or writeability.
`void` `add​(java.lang.String name, java.lang.Class<?> type, boolean readable, boolean writeable)` Add a new dynamic property with the specified data type, readability, and writeability.
`boolean` `isRestricted()` Is this DynaClass currently restricted, if so, no changes to the existing registration of property names, data types, readability, or writeability are allowed.
`void` `remove​(java.lang.String name)` Remove the specified dynamic property, and any associated data type, readability, and writeability, from this dynamic class.
`void` `setRestricted​(boolean restricted)` Set the restricted state of this DynaClass to the specified value.

### Methods inherited from interface org.apache.commons.beanutils.DynaClass

`getDynaProperties, getDynaProperty, getName, newInstance`

### Method Detail

#### add

    void add​(java.lang.String name)

Add a new dynamic property with no restrictions on data type, readability, or writeability.

Parameters:
  `name` - Name of the new dynamic property
Throws:
  `java.lang.IllegalArgumentException` - if name is null
  `java.lang.IllegalStateException` - if this DynaClass is currently restricted, so no new properties can be added

#### add

    void add​(java.lang.String name,
             java.lang.Class<?> type)

Add a new dynamic property with the specified data type, but with no restrictions on readability or writeability.

Parameters:
  `name` - Name of the new dynamic property
  `type` - Data type of the new dynamic property (null for no restrictions)
Throws:
  `java.lang.IllegalArgumentException` - if name is null
  `java.lang.IllegalStateException` - if this DynaClass is currently restricted, so no new properties can be added

#### add

    void add​(java.lang.String name,
             java.lang.Class<?> type,
             boolean readable,
             boolean writeable)

Add a new dynamic property with the specified data type, readability, and writeability.

Parameters:
  `name` - Name of the new dynamic property
  `type` - Data type of the new dynamic property (null for no restrictions)
  `readable` - Set to `true` if this property value should be readable
  `writeable` - Set to `true` if this property value should be writeable
Throws:
  `java.lang.IllegalArgumentException` - if name is null
  `java.lang.IllegalStateException` - if this DynaClass is currently restricted, so no new properties can be added

#### isRestricted

    boolean isRestricted()

Is this DynaClass currently restricted, if so, no changes to the existing registration of property names, data types, readability, or writeability are allowed.

Returns:
  `true` if this Mutable `DynaClass` is restricted, otherwise `false`

#### remove

    void remove​(java.lang.String name)

Remove the specified dynamic property, and any associated data type, readability, and writeability, from this dynamic class. NOTE - This does NOT cause any corresponding property values to be removed from DynaBean instances associated with this DynaClass.

Parameters:
  `name` - Name of the dynamic property to remove
Throws:
  `java.lang.IllegalArgumentException` - if name is null
  `java.lang.IllegalStateException` - if this DynaClass is currently restricted, so no properties can be removed

#### setRestricted

    void setRestricted​(boolean restricted)

Set the restricted state of this DynaClass to the specified value.

Parameters:
  `restricted` - The new restricted state