Package org.apache.commons.beanutils2

# 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.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `add(String name)`
  Add a new dynamic property with no restrictions on data type, readability, or writeability.
  `void`
  `add(String name, Class<?> type)`
  Add a new dynamic property with the specified data type, but with no restrictions on readability or writeability.
  `void`
  `add(String name, Class<?> type, boolean readable, boolean writable)`
  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(String name)`
  Remove the specified dynamic property, and any associated data type, readability, and writeability, from this dynamic class.
  `void`
  `setRestricted(boolean restricted)`
  Sets the restricted state of this DynaClass to the specified value.

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

  `getDynaProperties, getDynaProperty, getName, newInstance`

- ## Method Details

  - ### add

    void add(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:
      `IllegalArgumentException` - if name is null
      `IllegalStateException` - if this DynaClass is currently restricted, so no new properties can be added

  - ### add

    void add(String name, 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:
      `IllegalArgumentException` - if name is null
      `IllegalStateException` - if this DynaClass is currently restricted, so no new properties can be added

  - ### add

    void add(String name, Class<?> type, boolean readable, boolean writable)
    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
      `writable` - Set to `true` if this property value should be writable
    Throws:
      `IllegalArgumentException` - if name is null
      `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(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:
      `IllegalArgumentException` - if name is null
      `IllegalStateException` - if this DynaClass is currently restricted, so no properties can be removed

  - ### setRestricted

    void setRestricted(boolean restricted)
    Sets the restricted state of this DynaClass to the specified value.
    Parameters:
      `restricted` - The new restricted state