A PropertyDescriptor describes one property that a Java Bean
exports via a pair of accessor methods.
Constructs a PropertyDescriptor for a property that follows
the standard Java convention by having getFoo and setFoo
accessor methods. Thus if the argument name is "fred", it will
assume that the writer method is "setFred" and the reader method
is "getFred" (or "isFred" for a boolean property). Note that the
property name should start with a lower case character, which will
be capitalized in the method names.
- Parameters:
propertyName The programmatic name of the property.beanClass The Class object for the target bean. For
example sun.beans.OurButton.class.- Throws:
IntrospectionException if an exception occurs during
introspection.
this(propertyName, beanClass,
This constructor takes the name of a simple property, and method
names for reading and writing the property.
- Parameters:
propertyName The programmatic name of the property.beanClass The Class object for the target bean. For
example sun.beans.OurButton.class.readMethodName The name of the method used for reading the property
value. May be null if the property is write-only.writeMethodName The name of the method used for writing the property
value. May be null if the property is read-only.- Throws:
IntrospectionException if an exception occurs during
introspection.
if (propertyName == null || propertyName.length() == 0) { if ("".equals(readMethodName) || "".equals(writeMethodName)) { this.bound = null != Introspector.findMethod(beanClass, "addPropertyChangeListener", args.length, args);
This constructor takes the name of a simple property, and Method
objects for reading and writing the property.
- Parameters:
propertyName The programmatic name of the property.readMethod The method used for reading the property value.
May be null if the property is write-only.writeMethod The method used for writing the property value.
May be null if the property is read-only.- Throws:
IntrospectionException if an exception occurs during
introspection.
if (propertyName == null || propertyName.length() == 0) { Creates
PropertyDescriptor for the specified bean
with the specified name and methods to read/write the property value.
- Parameters:
bean the type of the target beanbase the base name of the property (the rest of the method name)read the method used for reading the property valuewrite the method used for writing the property value- Throws:
IntrospectionException if an exception occurs during introspection- Since:
- 1.7
Returns the Java type info for the property.
Note that the
Class object may describe
primitive Java types such as
int.
This type is returned by the read method
or is used as the parameter type of the write method.
Returns
null if the type is an indexed property
that does not support non-indexed access.
- Returns:
- the
Class object that represents the Java type info,
or null if the type cannot be determined
Gets the method that should be used to read the property value.
- Returns:
- The method that should be used to read the property value.
May return null if the property can't be read.
if (readMethod == null) { if (type == boolean.class || type == null) { if (readMethod == null) { Sets the method that should be used to read the property value.
- Parameters:
readMethod The new read method.
if (readMethod == null) { Gets the method that should be used to write the property value.
- Returns:
- The method that should be used to write the property value.
May return null if the property can't be written.
if (writeMethod == null) { Class[] args = (type == null) ? null : new Class[] { type }; if (writeMethod != null) { Sets the method that should be used to write the property value.
- Parameters:
writeMethod The new write method.
if (writeMethod == null) { Overridden to ensure that a super class doesn't take precedent
Updates to "bound" properties will cause a "PropertyChange" event to
get fired when the property is changed.
- Returns:
- True if this is a bound property.
Updates to "bound" properties will cause a "PropertyChange" event to
get fired when the property is changed.
- Parameters:
bound True if this is a bound property.
Attempted updates to "Constrained" properties will cause a "VetoableChange"
event to get fired when the property is changed.
- Returns:
- True if this is a constrained property.
Attempted updates to "Constrained" properties will cause a "VetoableChange"
event to get fired when the property is changed.
- Parameters:
constrained True if this is a constrained property.
Normally PropertyEditors will be found using the PropertyEditorManager.
However if for some reason you want to associate a particular
PropertyEditor with a given property, then you can do it with
this method.
- Parameters:
propertyEditorClass The Class for the desired PropertyEditor.
Gets any explicit PropertyEditor Class that has been registered
for this property.
- Returns:
- Any explicit PropertyEditor Class that has been registered
for this property. Normally this will return "null",
indicating that no special editor has been registered,
so the PropertyEditorManager should be used to locate
a suitable PropertyEditor.
Constructs an instance of a property editor using the current
property editor class.
If the property editor class has a public constructor that takes an
Object argument then it will be invoked using the bean parameter
as the argument. Otherwise, the default constructor will be invoked.
- Parameters:
bean the source object- Returns:
- a property editor instance or null if a property editor has
not been defined or cannot be created
- Since:
- 1.5
Compares this
PropertyDescriptor against the specified object.
Returns true if the objects are the same. Two
PropertyDescriptors
are the same if the read, write, property types, property editor and
flags are equivalent.
Package private helper method for Descriptor .equals methods.
- Parameters:
a first method to compareb second method to compare- Returns:
- boolean to indicate that the methods are equivalent
if ((a == null) != (b == null)) { if (a != null && b != null) { Package-private constructor.
Merge two property descriptors. Where they conflict, give the
second argument (y) priority over the first argument (x).
- Parameters:
x The first (lower priority) PropertyDescriptory The second (higher priority) PropertyDescriptor
if (y.baseName != null) { if (y.readMethodName != null) { if (y.writeMethodName != null) { if (y.propertyTypeRef != null) { if (xr != null && yr != null &&
bound = x.bound | y.bound;
Returns the property type that corresponds to the read and write method.
The type precedence is given to the readMethod.
- Returns:
- the type of the property descriptor or null if both
read and write methods are null.
- Throws:
IntrospectionException if the read or write method is invalid
Class propertyType = null;
if (readMethod != null) { if (params.length != 0) { readMethod.getName() + " returns void");
if (writeMethod != null) { if (params.length != 1) { if (propertyType != null && propertyType != params[0]) { propertyType = params[0];
Returns a hash code value for the object.
See
java.lang.Object.hashCode() for a complete description.
- Returns:
- a hash code value for this object.
- Since:
- 1.5
result = 37 * result + ((bound == false) ? 0 : 1);
result = 37 * result + ((constrained == false) ? 0 : 1);