org.apache.commons.beanutils

## Class BasicDynaClass

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

- All Implemented Interfaces:
    Serializable, DynaClass
  Direct Known Subclasses:
    LazyDynaClass

      public class BasicDynaClass
      extends Object
      implements DynaClass, 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
    Modifier and Type | Field and Description
    --- | ---
    `protected Constructor<?>` | `constructor` The constructor of the `dynaBeanClass` that we will use for creating new instances.
    `protected static Class<?>[]` | `constructorTypes` The method signature of the constructor we will use to create new DynaBean instances.
    `protected Object[]` | `constructorValues` The argument values to be passed to the constructore 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 and Description
    `BasicDynaClass()` Construct a new BasicDynaClass with default parameters.
    `BasicDynaClass(String name, Class<?> dynaBeanClass)` Construct a new BasicDynaClass with the specified parameters.
    `BasicDynaClass(String name, Class<?> dynaBeanClass, DynaProperty[] properties)` Construct a new BasicDynaClass with the specified parameters.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `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(String name)` Return a property descriptor for the specified property, if it exists; otherwise, return `null`.
    `String` | `getName()` Return the name of this DynaClass (analogous to the `getName()` method of `java.lang.ClassDynaClass` 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)` 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 Constructor<?> constructor

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

    - #### constructorTypes

          protected static Class<?>[] constructorTypes

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

    - #### constructorValues

          protected Object[] constructorValues

      The argument values to be passed to the constructore 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 Detail

    - #### BasicDynaClass

          public BasicDynaClass()

      Construct a new BasicDynaClass with default parameters.

    - #### BasicDynaClass

          public BasicDynaClass(String name,
                                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(String name,
                                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 String getName()

      Return the name of this DynaClass (analogous to the `getName()` method of `java.lang.ClassDynaClass` 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(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:
        `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 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

    - #### getDynaBeanClass

          public 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(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:
        `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

Copyright © 2000–2019 The Apache Software Foundation. All rights reserved.