java.lang.Object
javax.management.ImmutableDescriptor
- 所有已实现的接口:
-
Serializable
,Cloneable
,Descriptor
一个不可变的描述符。
- 自版本:
- 1.6
- 参见:
-
Field Summary
-
Constructor Summary
ConstructorDescriptionImmutableDescriptor
(String... fields) 包含给定字段的描述符。ImmutableDescriptor
(String[] fieldNames, Object[] fieldValues) 包含给定字段和值的描述符。ImmutableDescriptor
(Map<String, ?> fields) 字段的名称和值是给定Map的键和值的描述符。 -
Method Summary
Modifier and TypeMethodDescriptionclone()
返回与此描述符相等的描述符。boolean
将此描述符与给定对象进行比较。final String[]
返回描述符中的所有字段名称。final String[]
将此描述符中包含的所有字段作为字符串数组返回。final Object
getFieldValue
(String fieldName) 返回特定字段名称的值,如果该名称没有值则返回null。final Object[]
getFieldValues
(String... fieldNames) 将描述符中的所有字段值作为对象数组返回。int
hashCode()
返回此描述符的哈希码值。boolean
isValid()
如果所有字段的值在给定其名称的情况下都合法,则返回true。final void
removeField
(String fieldName) 从描述符中移除一个字段。final void
由于此类是不可变的,因此不支持此操作。final void
由于此类是不可变的,因此不支持此操作。static ImmutableDescriptor
union
(Descriptor... descriptors) 返回一个ImmutableDescriptor
,其内容是给定描述符的并集。
-
Field Details
-
EMPTY_DESCRIPTOR
一个空的描述符。
-
-
Constructor Details
-
ImmutableDescriptor
包含给定字段和值的描述符。- 参数:
-
fieldNames
- 字段名称 -
fieldValues
- 字段值 - 抛出:
-
IllegalArgumentException
- 如果任一数组为null,或者数组大小不同,或者字段名称为null或空,或者相同字段名称出现多次。
-
ImmutableDescriptor
包含给定字段的描述符。每个字符串必须是fieldName=fieldValue
的形式。字段名称在第一个=
字符处结束;例如,如果字符串是a=b=c
,则字段名称是a
,其值是b=c
。- 参数:
-
fields
- 字段名称 - 抛出:
-
IllegalArgumentException
- 如果参数为null,或者字段名称为空,或者相同字段名称出现多次,或者其中一个字符串不包含=
字符。
-
ImmutableDescriptor
字段的名称和值是给定Map的键和值的描述符。
- 参数:
-
fields
- 字段名称和值 - 抛出:
-
IllegalArgumentException
- 如果参数为null,或者字段名称为null或空,或者相同字段名称出现多次(因为字段名称不区分大小写)。
-
-
Method Details
-
union
返回一个
ImmutableDescriptor
,其内容是给定描述符的并集。任何描述符中出现的每个字段名称都将在结果中出现,并且在调用该方法时具有的值。对任何描述符的后续更改不会影响此处返回的ImmutableDescriptor。在最简单的情况下,只有一个描述符,返回的
ImmutableDescriptor
是在调用此方法时其字段的副本:Descriptor d = something(); ImmutableDescriptor copy = ImmutableDescriptor.union(d);
- 参数:
-
descriptors
- 要合并的描述符。任何描述符都可以为null,在这种情况下将被跳过。 - 返回:
-
一个
ImmutableDescriptor
,它是给定描述符的并集。如果返回的对象是包含所有必需字段的ImmutableDescriptor,则可能与输入描述符之一相同。 - 抛出:
-
IllegalArgumentException
- 如果两个描述符包含具有不同关联值的相同字段名称。如果原始数组值是相同类型且具有相同元素的原始数组值,则将认为它们相同。如果对象数组值也是如此,并且Arrays.deepEquals(Object[],Object[])
返回true,则认为它们相同。
-
getFieldValue
从接口复制的描述:Descriptor
返回特定字段名称的值,如果该名称没有值则返回null。- 指定者:
-
getFieldValue
在接口Descriptor
- 参数:
-
fieldName
- 字段名称。 - 返回:
- 相应的值,如果字段不存在则返回null。
-
getFields
从接口复制的描述:Descriptor
返回此描述符中包含的所有字段作为字符串数组。- 指定者:
-
getFields
在接口Descriptor
- 返回:
-
以fieldName=fieldValue格式的字段的字符串数组
如果字段的值不是字符串,则将调用其toString()方法,并将返回的值(用括号括起来)用作返回数组中字段的值。如果字段的值为null,则返回数组中字段的值为空。如果描述符为空,则将获得一个空数组。 - 参见:
-
getFieldValues
从接口复制的描述:Descriptor
返回描述符中所有字段值的对象数组。返回的值与fieldNames
字符串数组参数的顺序相同。- 指定者:
-
getFieldValues
在接口Descriptor
- 参数:
-
fieldNames
- 字段名称的字符串数组,应返回其值。如果数组为空,则将返回一个空数组。如果数组为null,则将返回所有值,就像参数是由Descriptor.getFieldNames()
返回的数组一样。如果数组中的字段名称不存在,包括为空或空字符串的情况,则将为要返回的匹配数组元素返回null。 - 返回:
-
字段值的对象数组。如果
fieldNames
列表为空,则将获得一个空数组。
-
getFieldNames
从接口复制的描述:Descriptor
返回描述符中的所有字段名称。- 指定者:
-
getFieldNames
在接口Descriptor
- 返回:
- 字段名称的字符串数组。如果描述符为空,则将获得一个空数组。
-
equals
将此描述符与给定对象进行比较。如果给定对象也是描述符,并且两个描述符具有相同的字段名称(可能在大小写上有所不同)和相同的关联值,则对象相等。如果两个描述符中的字段的值相等,则满足以下条件:- 如果一个值为null,则另一个值也必须为null。
- 如果一个值是原始数组,则另一个值也必须是具有相同类型和相同元素的原始数组。
- 如果一个值是对象数组,则另一个值也必须是,并且
Arrays.deepEquals(Object[],Object[])
必须返回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(Object[])
来计算h
。 - 否则
h
为v.hashCode()
。
- 指定者:
-
hashCode
在接口Descriptor
中 - 覆盖:
-
hashCode
在类Object
中 - 返回:
- 此对象的哈希码值。
- 参见:
- 如果
-
isValid
public boolean isValid()如果所有字段的值在给定其名称的情况下都合法,则返回true。此方法始终返回true,但子类可以在适当时覆盖它以返回false。- 指定者:
-
isValid
在接口Descriptor
中 - 返回:
- 如果值合法则返回true。
- 抛出:
-
RuntimeOperationsException
- 如果有效性检查失败。如果描述符无效,则该方法返回false,但如果确定有效性的尝试失败,则会抛出此异常。
-
clone
返回一个与此描述符相等的描述符。对返回的描述符进行更改不会影响此描述符,反之亦然。
此方法返回调用它的对象。子类可以覆盖它以返回另一个对象,只要遵守合同即可。
- 指定者:
-
clone
在接口Descriptor
中 - 覆盖:
-
clone
在类Object
中 - 返回:
- 此实例的克隆。
- 抛出:
-
RuntimeOperationsException
- 对于字段名称或字段值的非法值。如果由于任何原因描述符构造失败,则将抛出此异常。 - 参见:
-
setFields
public final void setFields(String[] fieldNames, Object[] fieldValues) throws RuntimeOperationsException 由于此类是不可变的,因此不支持此操作。如果此调用将更改具有相同内容的可变描述符,则会抛出包装了RuntimeOperationsException
的UnsupportedOperationException
。否则,行为与对可变描述符的行为相同:由于非法参数而抛出异常,或者没有效果。- 指定者:
-
setFields
在接口Descriptor
中 - 参数:
-
fieldNames
- 字段名称的字符串数组。数组和数组元素不能为null。 -
fieldValues
- 相应字段值的对象数组。数组不能为null。数组的元素可以为null。 - 抛出:
-
RuntimeOperationsException
- 如果更改由于任何原因失败。如果fieldNames
或fieldValues
为null,或者数组长度不同,或者其中一个中存在非法值,则包装的异常为IllegalArgumentException
。如果描述符是不可变的,并且调用将更改其内容,则包装的异常为UnsupportedOperationException
。 - 参见:
-
setField
由于此类是不可变的,因此不支持此操作。如果此调用将更改具有相同内容的可变描述符,则会抛出包装了RuntimeOperationsException
的UnsupportedOperationException
。否则,行为与对可变描述符的行为相同:由于非法参数而抛出异常,或者没有效果。- 指定者:
-
setField
在接口Descriptor
中 - 参数:
-
fieldName
- 要设置的字段名称。不能为null或空。 -
fieldValue
- 要为字段名称设置的字段值。如果这是字段的有效值,则可以为null。 - 抛出:
-
RuntimeOperationsException
- 如果字段名称或字段值非法(包装的异常为IllegalArgumentException
);或者如果描述符是不可变的(包装的异常为UnsupportedOperationException
)。
-
removeField
从描述符中移除一个字段。- 指定者:
-
removeField
在接口Descriptor
中 - 参数:
-
fieldName
- 要移除的字段的名称。如果字段名称非法或未找到字段,则不会抛出异常。 - 抛出:
-
RuntimeOperationsException
- 如果存在给定名称的字段并且描述符是不可变的。包装的异常将是一个UnsupportedOperationException
。
-