- 所有已实现的接口:
-
Serializable
,Cloneable
,Descriptor
描述符由一组字段组成。每个字段都以字段名=字段值的格式。字段名称不区分大小写,字段值的大小写将被保留。
所有字段名称和值都不是预定义的。新字段可以由任何程序定义并添加。为了实现的一致性和ModelMBeanInfo、ModelMBeanAttributeInfo、ModelMBeanConstructorInfo、ModelMBeanNotificationInfo、ModelMBeanOperationInfo和ModelMBean类的支持,一些字段已经被预定义。
这个类的serialVersionUID是-6292969195866300415L
。
- 自从:
- 1.5
- 参见:
-
Constructor Summary
ConstructorDescription默认构造函数。DescriptorSupport
(int initNumFields) 构造函数。DescriptorSupport
(String inStr) 以XML字符串作为参数的构造函数。DescriptorSupport
(String... fields) 以fieldName=fieldValue格式的字段作为参数的构造函数。DescriptorSupport
(String[] fieldNames, Object[] fieldValues) 以字段名称和字段值作为参数的构造函数。DescriptorSupport
(DescriptorSupport inDescr) 以描述符作为参数的构造函数。 -
Method Summary
Modifier and TypeMethodDescriptionclone()
返回一个描述符的副本。boolean
将此描述符与给定对象进行比较。String[]
返回描述符中的所有字段名称。String[]
将描述符中包含的所有字段作为字符串数组返回。getFieldValue
(String fieldName) 返回特定字段名称的值,如果该名称没有值则返回null。Object[]
getFieldValues
(String... fieldNames) 将描述符中的所有字段值作为对象数组返回。int
hashCode()
返回此描述符的哈希码值。boolean
isValid()
如果所有字段的值都合法,则返回true。void
removeField
(String fieldName) 从描述符中移除一个字段。void
设置特定字段名称的值。void
将字段名称数组中的所有字段设置为字段值数组中相同索引处的新值。toString()
返回表示描述符的人类可读字符串。返回表示描述符的XML字符串。
-
Constructor Details
-
DescriptorSupport
public DescriptorSupport() -
DescriptorSupport
- 参数:
-
initNumFields
- 存储描述符字段的Map的初始容量。 - 抛出:
-
RuntimeOperationsException
- 对于initNumFields的非法值(<= 0) -
MBeanException
- 封装了分布式通信异常。
-
DescriptorSupport
以描述符作为参数的构造函数。创建一个新的描述符,其值初始化为传递的描述符的值。- 参数:
-
inDescr
- 用于初始化构造描述符的描述符。如果为null或不包含描述符字段,则将创建一个空描述符。
-
DescriptorSupport
public DescriptorSupport(String inStr) throws MBeanException, RuntimeOperationsException, XMLParseException 以XML字符串作为参数的构造函数。
XML字符串的格式未定义,但实现必须确保现有描述符的
toXMLString()
方法返回的字符串可以用于使用此构造函数实例化等效描述符。在此实现中,所有字段值将被创建为字符串。如果字段值不是字符串,则程序员必须正确重置或转换这些字段。
- 参数:
-
inStr
- 用于填充此描述符的XML格式字符串。格式未定义,但任何实现必须确保使用方法toXMLString
在现有描述符上实例化等效描述符时,可以使用此构造函数。 - 抛出:
-
RuntimeOperationsException
- 如果传递的参数inStr为null -
XMLParseException
- 解析输入字符串时出现XML解析问题 -
MBeanException
- 封装了分布式通信异常。
-
DescriptorSupport
public DescriptorSupport(String[] fieldNames, Object[] fieldValues) throws RuntimeOperationsException 以字段名称和字段值作为参数的构造函数。两个数组都不能为null。- 参数:
-
fieldNames
- 字段名称的字符串数组。此数组的任何元素都不能为null。 -
fieldValues
- 相应字段值的对象数组。数组的元素可以为null。fieldValue
必须对fieldName
有效(如方法isValid
中定义)注意:参数的数组大小应该匹配。如果两个数组都为空,则创建一个空描述符。
- 抛出:
-
RuntimeOperationsException
- 对于字段名称或字段值的非法值。数组长度必须相等。如果由于任何原因描述符构造失败,则将抛出此异常。
-
DescriptorSupport
以fieldName=fieldValue格式的字段作为参数的构造函数。- 参数:
-
fields
- 包含每个元素都包含字段名称和值的字符串数组。如果此数组为null或为空,则将执行默认构造函数。将忽略null字符串或空字符串。所有字段值应为字符串。如果字段值不是字符串,则程序员必须正确重置或转换这些字段。
注意:每个字符串应为fieldName=fieldValue形式。字段名称在第一个
=
字符结束;例如,如果字符串为a=b=c
,则字段名称为a
,其值为b=c
。 - 抛出:
-
RuntimeOperationsException
- 对于字段名称或字段值的非法值。字段必须包含一个"="。"=fieldValue","fieldName"和"fieldValue"都是非法的。FieldName不能为null。"fieldName="将导致值为null。如果由于任何原因描述符构造失败,则将抛出此异常。
-
-
Method Details
-
getFieldValue
从接口复制的描述:Descriptor
返回特定字段名称的值,如果该名称没有值则返回null。- 指定者:
-
getFieldValue
在接口Descriptor
- 参数:
-
fieldName
- 字段名称。 - 返回:
- 相应的值,如果该字段不存在则返回null。
- 抛出:
-
RuntimeOperationsException
- 如果字段名称非法。
-
setField
从接口复制的描述:Descriptor
设置特定字段名称的值。这将修改现有字段或添加新字段。
在设置之前,字段值将被验证。如果不合法,则会抛出异常。有效性的含义取决于描述符的实现。
- 指定者:
-
setField
在接口Descriptor
- 参数:
-
fieldName
- 要设置的字段名称。不能为null或空。 -
fieldValue
- 要为字段名称设置的字段值。如果这是字段的有效值,则可以为null。 - 抛出:
-
RuntimeOperationsException
- 如果字段名称或字段值非法(包装异常为IllegalArgumentException
);或如果描述符是不可变的(包装异常为UnsupportedOperationException
)。
-
getFields
从接口复制的描述:Descriptor
返回此描述符中包含的所有字段作为字符串数组。- 指定者:
-
getFields
在接口Descriptor
中 - 返回:
-
以fieldName=fieldValue格式的字段字符串数组
如果字段的值不是字符串,则将调用其toString()方法,并将返回的值(括在括号中)用作返回数组中字段的值。如果字段的值为null,则返回数组中的字段值将为空。如果描述符为空,则将获得一个空数组。 - 参见:
-
getFieldNames
从接口复制的描述:Descriptor
返回描述符中的所有字段名称。- 指定者:
-
getFieldNames
在接口Descriptor
中 - 返回:
- 字段名称的字符串数组。如果描述符为空,则将获得一个空数组。
-
getFieldValues
从接口复制的描述:Descriptor
返回描述符中所有字段值的对象数组。返回的值与fieldNames
字符串数组参数的顺序相同。- 指定者:
-
getFieldValues
在接口Descriptor
中 - 参数:
-
fieldNames
- 字段值应返回的字段名称字符串数组。如果数组为空,则将返回一个空数组。如果数组为null,则将返回所有值,就好像参数是由Descriptor.getFieldNames()
返回的数组一样。如果数组中的字段名称不存在,包括为null或空字符串的情况,则将为要返回的匹配数组元素返回null。 - 返回:
-
字段值的对象数组。如果
fieldNames
列表为空,则将获得一个空数组。
-
setFields
从接口复制的描述:Descriptor
将字段名称数组中的所有字段设置为字段值数组中相同索引处的新值。数组大小必须匹配。
在设置字段值之前,将对其进行验证。如果无效,则将抛出异常。如果数组为空,则不会生效任何更改。
- 指定者:
-
setFields
在接口Descriptor
中 - 参数:
-
fieldNames
- 字段名称的字符串数组。数组和数组元素不能为null。 -
fieldValues
- 相应字段值的对象数组。数组不能为null。数组的元素可以为null。 - 抛出:
-
RuntimeOperationsException
- 如果由于任何原因更改失败。如果fieldNames
或fieldValues
为null,或者数组长度不同,或者其中一个中存在非法值,则包装异常为IllegalArgumentException
。如果描述符是不可变的,并且调用将更改其内容,则包装异常为UnsupportedOperationException
。 - 参见:
-
clone
返回描述符的副本。- 指定者:
-
clone
在接口Descriptor
中 - 覆盖:
-
clone
在类Object
中 - 返回:
- 此实例的克隆。
- 抛出:
-
RuntimeOperationsException
- 对于字段名称或字段值的非法值。如果由于任何原因描述符构造失败,则将抛出此异常。 - 参见:
-
removeField
从接口复制的描述:Descriptor
从描述符中移除一个字段。- 指定者:
-
removeField
在接口Descriptor
中 - 参数:
-
fieldName
- 要移除的字段的名称。如果字段名非法或未找到字段,则不会抛出异常。
-
equals
将此描述符与给定对象进行比较。如果给定对象也是描述符,并且两个描述符具有相同的字段名称(可能在大小写上有所不同)和相同的关联值,则对象相等。如果两个描述符中的字段的相应值相等,则字段的值相等,如果满足以下条件:- 如果一个值为null,则另一个值也必须为null。
- 如果一个值是原始数组,则另一个值也必须是具有相同类型和相同元素的原始数组。
- 如果一个值是对象数组,则另一个值也必须是,并且
Arrays.deepEquals
必须返回true。 - 否则,
Object.equals(Object)
必须返回true。
- 指定者:
-
equals
在接口Descriptor
中 - 覆盖:
-
equals
在类Object
中 - 参数:
-
o
- 要比较的对象。 - 返回:
-
如果对象相同,则为
true
;否则为false
。 - 参见:
-
hashCode
public int hashCode()返回此描述符的哈希码值。哈希码计算为描述符中每个字段的哈希码之和。具有名称
n
和值v
的字段的哈希码为n.toLowerCase().hashCode() ^ h
。这里的h
是v
的哈希码,计算如下:- 如果
v
为null,则h
为0。 - 如果
v
是原始数组,则使用java.util.Arrays.hashCode
的适当重载来计算h
。 - 如果
v
是对象数组,则使用Arrays.deepHashCode
来计算h
。 - 否则
h
为v.hashCode()
。
- 指定者:
-
hashCode
在接口Descriptor
中 - 覆盖:
-
hashCode
在类Object
中 - 返回:
- 此对象的哈希码值。
- 参见:
- 如果
-
isValid
返回true,如果所有字段的值在给定它们的名称时都是合法的。此实现不支持与目录或查找服务进行互操作。因此,根据规范,对"export"字段不进行检查。
否则,如果此实现返回false,则:
- name和descriptorType字段名未定义、为空、为null或不是String类型
- class、role、getMethod、setMethod字段名(如果定义)为null或不是String类型
- persistPeriod、currencyTimeLimit、lastUpdatedTimeStamp、lastReturnedTimeStamp(如果定义)为null,不是数字字符串或不是大于等于-1的数字值
- log字段名(如果定义)为null,不是布尔值或不是值为"t"、"f"、"true"、"false"的字符串。这些字符串值不区分大小写。
- visibility字段名(如果定义)为null,不是数字字符串或不是大于等于1且小于等于4的数字值
- severity字段名(如果定义)为null,不是数字字符串或不是大于等于0且小于等于6的数字值
- persistPolicy字段名(如果定义)为null,不是以下字符串之一:
"OnUpdate"、"OnTimer"、"NoMoreOftenThan"、"OnUnregister"、"Always"、"Never"。这些字符串值不区分大小写。
- 指定者:
-
isValid
在接口Descriptor
- 返回:
- 如果值合法,则返回true。
- 抛出:
-
RuntimeOperationsException
- 如果由于任何原因有效性检查失败,将抛出此异常。
-
toXMLString
返回表示描述符的XML字符串。
格式未定义,但实现必须确保此方法返回的字符串可用于在使用构造函数
DescriptorSupport(String inStr)
实例化时构建等效描述符。非String对象的字段将调用toString()以创建值。该值将被括在括号中。不能保证您可以重建这些对象,除非它们已经专门设置为支持以有意义的格式调用toString()并具有接受相同格式的String的匹配构造函数。
如果描述符为空,则返回以下字符串:<Descriptor></Descriptor>
- 返回:
- XML字符串。
- 抛出:
-
RuntimeOperationsException
- 对于字段名称或字段值的非法值。如果由于任何原因XML格式化字符串构造失败,将抛出此异常。
-
toString
返回表示描述符的人类可读字符串。字符串的格式为"fieldName=fieldValue,fieldName2=fieldValue2,..."
如果描述符中没有字段,则返回空字符串。
如果fieldValue是一个对象,则调用其toString()方法,并将其返回值用作字段的值,括在括号中。- 覆盖:
-
toString
在类Object
- 返回:
- 对象的字符串表示形式。
- 抛出:
-
RuntimeOperationsException
- 对于字段名称或字段值的非法值。如果描述符字符串由于任何原因失败,将抛出此异常。
-