|
ABLE 2.3.0 07/13/2005 14:21:00 | |||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||||
java.lang.Objectcom.ibm.able.data.AbleLhs
com.ibm.able.data.AbleTypedVariableField
This class provides read and/or write access to a field in an object that is the value of an AbleTypedVariable.
Introspection is used to find either the public data member corresponding to the specified field name on the object, or to find the public getter/setter methods on the field.
| Field Summary | |
|---|---|
protected int |
myDataType
An AbleData DataType constant that specifies this particular object's data type. |
protected java.lang.reflect.Field |
myField
A reference to the actual field in the above typed variable. |
protected java.lang.String |
myFieldName
|
protected boolean |
myGetDirectFlag
Indicates whether the field is directly readable; that is, whether the field is PUBLIC. |
protected java.lang.reflect.Method |
myGetMethod
The method used to get the current value of the field. |
protected boolean |
mySetDirectFlag
Indicates whether the field is directly writable; that is, whether the field is PUBLIC and non-FINAL. |
protected java.lang.reflect.Method |
mySetMethod
The method used to set the current value of the field. |
protected AbleTypedVariable |
myTypedVariable
The typed variable to which this field belongs. |
| Constructor Summary | |
|---|---|
AbleTypedVariableField(AbleTypedVariable theTypedVariable,
AbleTypedVariableField theField)
Create a new TypedVariableField on a new typed variable instance |
|
AbleTypedVariableField(AbleTypedVariable theTypedVariable,
java.lang.reflect.Field theField,
boolean theGetDirectFlag,
java.lang.reflect.Method theGetMethod,
boolean theSetDirectFlag,
java.lang.reflect.Method theSetMethod)
Create a new variable field reference object. |
|
AbleTypedVariableField(AbleTypedVariable theTypedVariable,
java.lang.String theFieldName)
Create a new variable field reference object. |
|
| Method Summary | |
|---|---|
java.lang.String |
arlCRdString()
Return a formal rule language "clause" string that describes this data object. |
java.lang.String |
arlDclString()
Return a formal rule language "declaration" string that describes this data object. |
void |
asgnEq(AbleRd theRhs)
Assignment (boolean): assign the current value of theRhs to this data object. |
void |
asgnIs(AbleRd theRhs)
Assignment (fuzzy): assign the current value of theRhs to this data object. |
void |
asgnIs(AbleRd theRhs,
double theTruthValue)
Assignment (fuzzy): assign the current value of theRhs to this data object, correlated with the specified truth value. |
AbleLiteral |
bitwiseAND(AbleRd theRhs)
Bitwise AND the current value of this data object with the current value of theRhs. |
AbleLiteral |
bitwiseNOT(AbleRd theRhs)
Bitwise NOT: unary complement of the current value of this data object. |
AbleLiteral |
bitwiseOR(AbleRd theRhs)
Bitwise OR the current value of this data object with the current value of theRhs. |
AbleLiteral |
bitwiseShiftLeft(AbleRd theRhs)
Bitwise Shift Left the current value of this data object by the current value of theRhs. |
AbleLiteral |
bitwiseShiftRight(AbleRd theRhs)
Bitwise Shift Right the current value of this data object by the current value of theRhs. |
AbleLiteral |
bitwiseShiftRightZeroFill(AbleRd theRhs)
Bitwise Shift Right with Zero Fill the current value of this data object by the current value of theRhs. |
AbleLiteral |
bitwiseXOR(AbleRd theRhs)
Bitwise XOR: exclusive OR the current value of this data object with the current value of theRhs. |
void |
clear()
|
static void |
clear(java.util.Iterator fields)
|
boolean |
cmpEq(AbleRd theRhs)
Comparison, equal to: compare the current value of this data object to the current value of theRhs. |
boolean |
cmpGt(AbleRd theRhs)
Comparison, greater than: compare the current value of this data object to the current value of theRhs. |
boolean |
cmpGtEq(AbleRd theRhs)
Comparison, greater than or equal to: compare the current value of this data object to the current value of theRhs. |
boolean |
cmpLt(AbleRd theRhs)
Comparison, less than: compare the current value of this data object to the current value of theRhs. |
boolean |
cmpLtEq(AbleRd theRhs)
Comparison, less than or equal to: compare the current value of this data object to the current value of theRhs. |
boolean |
cmpNeq(AbleRd theRhs)
Comparison, not equal to: compare the current value of this data object to the current value of theRhs. |
AbleLiteral |
compDivide(AbleRd theRhs)
Compute, divide the current value of this data object by the current value of theRhs. |
AbleLiteral |
compMinus(AbleRd theRhs)
Compute, subtract the current value of theRhs from the current value of this object. |
AbleLiteral |
compModulo(AbleRd theRhs)
Compute, modulo - divide (without remainder) the current int value of this data object by the current value of theRhs. |
AbleLiteral |
compMultiply(AbleRd theRhs)
Compute, multiply the current value of this data object to the current value of theRhs. |
AbleLiteral |
compPlus(AbleRd theRhs)
Compute, add or concatenate the current value of this data object to the current value of theRhs. |
boolean |
equals(java.lang.Object otherObject)
|
boolean |
getBooleanValue()
Retrieve the value of this data object as a boolean value. |
int |
getDataType()
Retrieve the data type of this data object. |
java.lang.Class |
getDataTypeClass()
Retrieve the Class of the underlying Field |
java.lang.String |
getDataTypeClassName()
Retrieve the Class name of the underlying Field |
java.lang.String |
getFieldName()
|
protected java.lang.Object |
getFieldValue()
|
AbleFuzzySet |
getFuzzyValue()
Retrieve the value of this data object as a fuzzy value. |
java.lang.Object |
getGenericValue()
Retrieve the value of this data object as an Object. |
double |
getNumericValue()
Retrieve the value of this data object as a numeric value. |
int |
getReferent()
Retrieve the Id of the variable to which this data object refers, if any. |
java.util.BitSet |
getReferents()
Retrieve the Ids of the variables to which this data object refers, if any. |
java.lang.String |
getStringValue()
Retrieve the value of this data object as a string value. |
java.lang.String |
getTemplateString(java.util.Vector theTemplateVars)
Return a formatted ARL text string for use by templates |
AbleTypedVariable |
getTypedVariable()
Retrieve the typed variable |
java.lang.Class |
getTypedVariableClass()
Retrieve the Class of the underlying typed variable |
AbleLiteral |
getValue()
Retrieve the value of this data object as a literal. |
AbleTypedVariable |
getVariable()
|
int |
hashCode()
|
boolean |
isReadable()
Returns true if the field is directly readable or if a method exists that can be used to get the value of the field. |
boolean |
isWritable()
Returns true if the field is directly writable or if a method exists that can be used to set the value of the field. |
boolean |
logicalAND(AbleRd theRhs)
Logical AND the current value of this data object with the current value of theRhs. |
boolean |
logicalNOT(AbleRd theRhs)
Logical NOT: complement the current value of this data object. |
boolean |
logicalOR(AbleRd theRhs)
Logical OR the current value of this data object with the current value of theRhs. |
void |
setBooleanValue(boolean theNewValue)
Set the value of this data object from a boolean value. |
void |
setField(java.lang.reflect.Field theField)
Used by AbleRuleSet during deserialization. |
void |
setFuzzyValue(AbleFuzzySet theNewValue)
Set the value of this data object from a fuzzy value. |
void |
setGenericValue(java.lang.Object theNewValue)
Set the value of this data object from an object. |
void |
setGetMethod(java.lang.reflect.Method theGetMethod)
Used by AbleRuleSet during deserialization. |
void |
setNumericValue(double theNewValue)
Set the value of this data object from a numeric value. |
void |
setSetMethod(java.lang.reflect.Method theSetMethod)
Used by AbleRuleSet during deserialization. |
void |
setStringValue(java.lang.String theNewValue)
Set the value of this data object from a string value. |
void |
setValue(AbleLiteral theNewValue)
Set the value of this data object from a literal object. |
java.lang.String |
toString()
Retrieve a string describing (the contents of) the object. |
java.lang.String |
traceString(int theTraceStringFlavor)
Retrieve a string describing (the contents of) the object. |
java.lang.String |
xmlCRdString()
Return a formal XML "read clause" string that describes this data object; for example, "very, very hot". |
java.lang.String |
xmlCWrString()
Return a formal XML "clause write" string that describes this data object. |
java.lang.String |
xmlDclString()
Return a formal XML "declaration" string that describes this data object. |
| Methods inherited from class com.ibm.able.data.AbleLhs |
|---|
cmpIs, compUnaryMinus, isConstant |
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Field Detail |
protected int myDataType
This field is initialized to AbleData.TypedVariableField.
protected AbleTypedVariable myTypedVariable
This field is initialized to null and changed by the constructor when a new typed variable field is created.
protected transient java.lang.reflect.Field myField
This field is initialized to null and changed by the contructor when a new typed variable field is created.
protected java.lang.String myFieldName
protected boolean myGetDirectFlag
This field is initialized to false and may be changed by the contructor when a new typed variable field is created. If this member remains false, it means that myField is not directly readable and myGetMethod must be used to access the field.
protected transient java.lang.reflect.Method myGetMethod
This field is initialized to null and may be changed by the contructor when a new typed variable field is created. If this member remains null and myGetDirectFlag is false, myField is NOT readable at all. However, if this field contains a valid Method object, that Method can be used to access the field.
protected boolean mySetDirectFlag
This field is initialized to false and may be changed by the contructor when a new typed variable field is created. If this member remains false, it means that myField is not directly writable and mySetMethod must be used to access the field.
protected transient java.lang.reflect.Method mySetMethod
This field is initialized to null and may be changed by the contructor when a new typed variable field is created. If this member remains null and mySetDirectFlag is false, myField is NOT writable at all. However, if this field contains a valid Method object, that Method can be used to access the field.
| Constructor Detail |
public AbleTypedVariableField(AbleTypedVariable theTypedVariable,
java.lang.reflect.Field theField,
boolean theGetDirectFlag,
java.lang.reflect.Method theGetMethod,
boolean theSetDirectFlag,
java.lang.reflect.Method theSetMethod)
theTypedVariable - A typed variable that contains the following field.
theField - A specific field within the above typed variable.
theGetDirectFlag - If true, the field can be read directly without
the use of theGetMethod (it is a PUBLIC field),
so theGetMethod itself can be null.
If false, the field is not directly accessible,
so the method must be specified.
If the flag is false AND the method is null, runtime
exceptions will be thrown!
theGetMethod - A method on the typed variable that can be used to
obtain the field's current value. If null is
specified, it means that theField is PUBLIC and
directly readable. The getDirectFlag must be true.
theSetDirectFlag - If true, the field can be set directly without
the use of theSetMethod (it is a PUBLIC, non-FINAL field),
so theSetMethod itself can be null.
If false, the field is not directly accessible,
so the method must be specified.
If the flag is false AND the method is null, runtime
exceptions will be thrown!
theSetMethod - A method on the typed variable that can be used to set
the field's current value. If null is
specified, it means that theField is PUBLIC,
non-FINAL, and directly writable. The setDirectFlag
must be true.
public AbleTypedVariableField(AbleTypedVariable theTypedVariable,
AbleTypedVariableField theField)
public AbleTypedVariableField(AbleTypedVariable theTypedVariable,
java.lang.String theFieldName)
throws AbleParException
theTypedVariable - A typed variable that contains the following field.
theFieldName - A specific field within the above typed variable.
| Method Detail |
public boolean getBooleanValue()
throws AbleDataException
getBooleanValue in interface AbleRdgetBooleanValue in class AbleLhsAbleDataException - If the value of this object cannot be represented as
a boolean value.
public AbleFuzzySet getFuzzyValue()
throws AbleDataException
getFuzzyValue in interface AbleRdgetFuzzyValue in class AbleLhsAbleDataException - If the value of this object cannot be represented as
a fuzzy value.
public java.lang.Object getGenericValue()
throws AbleDataException
getGenericValue in interface AbleRdgetGenericValue in class AbleLhsAbleDataException - If the value of this object cannot be represented as
an Object.
public double getNumericValue()
throws AbleDataException
getNumericValue in interface AbleRdgetNumericValue in class AbleLhsAbleDataException - If the value of this object cannot be represented as
a numeric value.
public java.lang.String getStringValue()
throws AbleDataException
getStringValue in interface AbleRdgetStringValue in class AbleLhsAbleDataException - If the value of this object cannot be represented as
a string value.
public AbleLiteral getValue()
throws AbleDataException
getValue in interface AbleRdgetValue in class AbleLhsAbleDataException - If the value of this object cannot be represented as
a literal.public int getReferent()
getReferent in interface AbleRdgetReferent in class AbleLhspublic java.util.BitSet getReferents()
getReferents in interface AbleRdpublic int getDataType()
getDataType in interface AbleRdgetDataType in class AbleLhspublic java.lang.String arlCRdString()
arlCRdString in interface AbleRdarlCRdString in class AbleLhspublic java.lang.String xmlCRdString()
xmlCRdString in interface AbleRdxmlCRdString in class AbleLhs
public boolean cmpEq(AbleRd theRhs)
throws AbleDataException
"==" is used for numeric and boolean compares; equals() is used for Object compares; and equals() is used for String compares.
cmpEq in interface AbleRdcmpEq in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean cmpGt(AbleRd theRhs)
throws AbleDataException
">" is used for numeric compares; Collator.compare() is used for String compares. Use of other data types on the left-hand side causes an exception.
cmpGt in interface AbleRdcmpGt in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean cmpGtEq(AbleRd theRhs)
throws AbleDataException
">=" is used for numeric compares; Collator.compare() is used for String compares. Use of other data types on the left-hand side causes an exception.
cmpGtEq in interface AbleRdcmpGtEq in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean cmpLt(AbleRd theRhs)
throws AbleDataException
"<" is used for numeric compares; Collator.compare() is used for String compares. Use of other data types on the left-hand side causes an exception.
cmpLt in interface AbleRdcmpLt in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean cmpLtEq(AbleRd theRhs)
throws AbleDataException
"<=" is used for numeric compares; Collator.compare() is used for String compares. Use of other data types on the left-hand side causes an exception.
cmpLtEq in interface AbleRdcmpLtEq in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean cmpNeq(AbleRd theRhs)
throws AbleDataException
"!=" is used for numeric and boolean compares; ! equals() is used for Object compares; and ! Collator.equals() is used for String compares.
cmpNeq in interface AbleRdcmpNeq in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral compPlus(AbleRd theRhs)
throws AbleDataException
"+" is used for numeric addtion and String concatenation.
compPlus in interface AbleRdcompPlus in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral compMinus(AbleRd theRhs)
throws AbleDataException
"-" is used for numeric subtraction.
compMinus in interface AbleRdcompMinus in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral compMultiply(AbleRd theRhs)
throws AbleDataException
"*" is used for numeric multiplication.
compMultiply in interface AbleRdcompMultiply in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral compDivide(AbleRd theRhs)
throws AbleDataException
"/" is used for numeric division.
compDivide in interface AbleRdcompDivide in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral compModulo(AbleRd theRhs)
throws AbleDataException
"%" is used for integer division without remainder.
compModulo in interface AbleRdcompModulo in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean logicalAND(AbleRd theRhs)
throws AbleDataException
"&&" is used for boolean AND.
logicalAND in interface AbleRdlogicalAND in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean logicalOR(AbleRd theRhs)
throws AbleDataException
"||" is used for boolean OR.
logicalOR in interface AbleRdlogicalOR in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public boolean logicalNOT(AbleRd theRhs)
throws AbleDataException
"!" is used for boolean NOT.
logicalNOT in interface AbleRdlogicalNOT in class AbleLhstheRhs - The right-hand side of the comparison.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseAND(AbleRd theRhs)
throws AbleDataException
"&" is used for bitwise AND.
bitwiseAND in interface AbleRdbitwiseAND in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseOR(AbleRd theRhs)
throws AbleDataException
"|" is used for bitwise OR.
bitwiseOR in interface AbleRdbitwiseOR in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseXOR(AbleRd theRhs)
throws AbleDataException
"^" is used for bitwise XOR.
bitwiseXOR in interface AbleRdbitwiseXOR in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseNOT(AbleRd theRhs)
throws AbleDataException
"~" is used for bitwise NOT or complement.
bitwiseNOT in interface AbleRdbitwiseNOT in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseShiftLeft(AbleRd theRhs)
throws AbleDataException
"&&" is used for boolean AND.
bitwiseShiftLeft in interface AbleRdbitwiseShiftLeft in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseShiftRight(AbleRd theRhs)
throws AbleDataException
">>" is used for bitwise shift right.
bitwiseShiftRight in interface AbleRdbitwiseShiftRight in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public AbleLiteral bitwiseShiftRightZeroFill(AbleRd theRhs)
throws AbleDataException
">>" is used for bitwise shift right with zero fill.
bitwiseShiftRightZeroFill in interface AbleRdbitwiseShiftRightZeroFill in class AbleLhstheRhs - The right-hand side of the operation.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and compared to this data object.
public void setBooleanValue(boolean theNewValue)
throws AbleDataException
setBooleanValue in interface AbleWrsetBooleanValue in class AbleLhstheNewValue - A boolean value.
AbleDataException - If the value of this object cannot be represented as
a boolean value.
public void setFuzzyValue(AbleFuzzySet theNewValue)
throws AbleDataException
setFuzzyValue in interface AbleWrsetFuzzyValue in class AbleLhstheNewValue - A fuzzy set.
AbleDataException - If the value of this object cannot be represented as
a fuzzy value.
public void setGenericValue(java.lang.Object theNewValue)
throws AbleDataException
setGenericValue in interface AbleWrsetGenericValue in class AbleLhstheNewValue - Any type of Object.
AbleDataException - If the value of this object cannot be derived from
the specified Object.
public void setNumericValue(double theNewValue)
throws AbleDataException
setNumericValue in interface AbleWrsetNumericValue in class AbleLhstheNewValue - Any number.
AbleDataException - If the value of this object cannot be represented as
a numeric value.
public void setStringValue(java.lang.String theNewValue)
throws AbleDataException
setStringValue in interface AbleWrsetStringValue in class AbleLhstheNewValue - A string.
AbleDataException - If the value of this object cannot be represented as
a string value.
public void setValue(AbleLiteral theNewValue)
throws AbleDataException
setValue in interface AbleWrsetValue in class AbleLhstheNewValue - An Able literal of any type. An attempt is made to
convert the literal to an appropriate type before
assigning it to this "writable" object.
AbleDataException - If the value of this object cannot be determined
from the literal object.public java.lang.String arlDclString()
This implementation always returns the empty string since fields and field references aren't explicitly declared anywhere.
arlDclString in interface AbleWrarlDclString in class AbleLhspublic java.lang.String xmlDclString()
This implementation always returns the empty string since fields and field references aren't explicitly declared anywhere.
xmlDclString in interface AbleWrxmlDclString in class AbleLhspublic java.lang.String xmlCWrString()
xmlCWrString in interface AbleWrxmlCWrString in class AbleLhspublic java.lang.String getTemplateString(java.util.Vector theTemplateVars)
getTemplateString in interface AbleRd
public void asgnEq(AbleRd theRhs)
throws AbleDataException
asgnEq in interface AbleWrasgnEq in class AbleLhstheRhs - The right-hand, or source, side of the assignment.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and assigned to this data object.
public void asgnIs(AbleRd theRhs)
throws AbleDataException
asgnIs in interface AbleWrasgnIs in class AbleLhstheRhs - The right-hand, or source, side of the assignment.
This must be a fuzzy set.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and assigned to this data object.
public void asgnIs(AbleRd theRhs,
double theTruthValue)
throws AbleDataException
asgnIs in interface AbleWrasgnIs in class AbleLhstheRhs - The right-hand, or source, side of the assignment.
This must be a fuzzy set.
theTruthValue - the truth value with which theRhs is correlated.
AbleDataException - If the right-hand side cannot be converted (if
necessary) and assigned to this data object.public boolean isWritable()
public boolean isReadable()
public AbleTypedVariable getVariable()
public java.lang.String getFieldName()
public java.lang.Class getDataTypeClass()
getDataTypeClass in interface AbleRdgetDataTypeClass in class AbleLhspublic java.lang.String getDataTypeClassName()
getDataTypeClassName in interface AbleRdgetDataTypeClassName in class AbleLhspublic AbleTypedVariable getTypedVariable()
public java.lang.Class getTypedVariableClass()
public void setField(java.lang.reflect.Field theField)
public void setGetMethod(java.lang.reflect.Method theGetMethod)
public void setSetMethod(java.lang.reflect.Method theSetMethod)
protected java.lang.Object getFieldValue()
throws AbleDataException
AbleDataExceptionpublic boolean equals(java.lang.Object otherObject)
public int hashCode()
public java.lang.String toString()
public java.lang.String traceString(int theTraceStringFlavor)
traceString in interface AbleRdtraceString in class AbleLhstheTraceStringFlavor - An Able.TraceStringFlavor value.
public static void clear(java.util.Iterator fields)
fields - public void clear()
clear in interface AbleClearable
|
ABLE 2.3.0 07/13/2005 14:21:00 | |||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||||