javax.management

接口
异常
注释
java.lang.Object
  继承者 javax.management.ImmutableDescriptor
所有已实现的接口:
Serializable, Cloneable, Descriptor

public class ImmutableDescriptor
     
extends Object
implements Descriptor

不可变的描述符。

从以下版本开始:
1.6
另请参见:
序列化表格

字段摘要
static ImmutableDescriptor EMPTY_DESCRIPTOR
          空描述符。
 
构造方法摘要
ImmutableDescriptor(Map<String,?> fields)
          构造一个描述符,其中字段名称和值是给定 Map 的键和值。
ImmutableDescriptor(String... fields)
          构造包含给定字段的描述符。
ImmutableDescriptor(String[] fieldNames, Object[] fieldValues)
          构造包含给定字段和值的描述符。
 
方法摘要
 Descriptor clone()
          返回一个与此描述符相等的描述符。
 boolean equals(Object o)
          将此描述符与给定对象进行比较。
 String[] getFieldNames()
          返回描述符中的所有字段名。
 String[] getFields()
          以 string 数组的形式返回此 descriptor 中所包含的所有字段。
 Object getFieldValue(String fieldName)
          返回指定字段名的值,如果该名称不存在任何值,则返回 null。
 Object[] getFieldValues(String... fieldNames)
          以 Object 数组的形式返回该 descriptor 中的所有字段值。
 int hashCode()
          返回此描述符的哈希码值。
 boolean isValid()
          如果所有字段在给定其名称的情况下都有合法值,则返回 true。
 void removeField(String fieldName)
          从描述符移除字段。
 void setField(String fieldName, Object fieldValue)
          因为此类不可变,所以不支持此操作。
 void setFields(String[] fieldNames, Object[] fieldValues)
          因为此类不可变,所以不支持此操作。
 String toString()
          返回该对象的字符串表示。
static ImmutableDescriptor union(Descriptor... descriptors)
          返回一个 ImmutableDescriptor,其内容是给定描述符的并集。
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

字段详细信息

EMPTY_DESCRIPTOR

public static final ImmutableDescriptor EMPTY_DESCRIPTOR
空描述符。

构造方法详细信息

ImmutableDescriptor

public ImmutableDescriptor(String[] fieldNames,
                           Object[] fieldValues)
构造包含给定字段和值的描述符。

抛出:
IllegalArgumentException - 如果数组为 null、数组的大小不同、字段名称为 null 或空,或者相同的字段名称出现多次。

ImmutableDescriptor

public ImmutableDescriptor(String... fields)
构造包含给定字段的描述符。每个 String 都必须是 fieldName=fieldValue 的形式。字段名称在第一个 = 字符处结束;例如,如果 String 为 a=b=c,则字段名称为 a 且其值为 b=c

抛出:
IllegalArgumentException - 如果参数为 null、字段名称为空、相同字段名称出现多次或者其中一个字符串不包含 = 字符。

ImmutableDescriptor

public ImmutableDescriptor(Map<String,?> fields)

构造一个描述符,其中字段名称和值是给定 Map 的键和值。

抛出:
IllegalArgumentException - 如果参数为 null、字段名称为 null 或空,或者相同字段名称出现多次(可能因为字段名称不区分大小写所致)。
方法详细信息

union

public static ImmutableDescriptor union(Descriptor... descriptors)

返回一个 ImmutableDescriptor,其内容是给定描述符的并集。出现在任何描述符中的每个字段名称都将出现在结果中,并具有调用方法时字段名称所具有的值。对任何描述符的后续更改不影响此处返回的 ImmutableDescriptor。

在最简单的情况下,只有一个描述符,且返回的 ImmutableDescriptor 是在调用此方法时该描述符中字段的副本:

Descriptor d = something();
ImmutableDescriptor copy = ImmutableDescriptor.union(d);
 

参数:
descriptors - 要合并的描述符。任何描述符都可以为 null,在此情况下可以将其跳过。
返回:
作为给定描述符并集的 ImmutableDescriptor。如果它是一个包含所有所需字段的 ImmutableDescriptor,则返回的对象可以与某个输入描述符相同。
抛出:
IllegalArgumentException - 如果两个 Descriptor 包含具有不同关联值的相同字段名称。如果基本类型数组值是具有相同元素的同一类型的值,则将其视为相同。如果 Arrays.deepEquals(Object[],Object[]) 返回 true,则将对象数组值视为相同。

getFieldValue

public final Object getFieldValue(String fieldName)
从接口 Descriptor 复制的描述
返回指定字段名的值,如果该名称不存在任何值,则返回 null。

指定者:
接口 Descriptor 中的 getFieldValue
参数:
fieldName - 字段名称。
返回:
相应的值,如果字段不存在,则返回 null。

getFields

public final String[] getFields()
从接口 Descriptor 复制的描述
以 string 数组的形式返回此 descriptor 中所包含的所有字段。

指定者:
接口 Descriptor 中的 getFields
返回:
各字段的 String 数组,格式为 fieldName=fieldValue
如果字段值不是一个 String,则对该值调用 toString() 方法并将返回值(用圆括号括起来)用作所返回数组中字段的值。如果字段的值为 null,则返回数组中的字段值将为空。如果描述符为空,则将得到一个空数组。
另请参见:
Descriptor.setFields(java.lang.String[], java.lang.Object[])

getFieldValues

public final Object[] getFieldValues(String... fieldNames)
从接口 Descriptor 复制的描述
以 Object 数组的形式返回该 descriptor 中的所有字段值。返回值的顺序与 fieldNames String 数组参数的顺序相同。

指定者:
接口 Descriptor 中的 getFieldValues
参数:
fieldNames - 字段名称的 String 数组,应该返回这些字段的值。如果该数组为空,则将返回一个空数组。如果数组为 null,则将返回所有值,如同参数是 Descriptor.getFieldNames() 返回的数组一样。如果数组中某个字段名不存在(包括字段名为 null 或空字符串的情况),则对于要返回的匹配数组元素,将返回 null。
返回:
字段值的 Object 数组。如果 fieldNames 列表为空,则将得到一个空数组。

getFieldNames

public final String[] getFieldNames()
从接口 Descriptor 复制的描述
返回描述符中的所有字段名。

指定者:
接口 Descriptor 中的 getFieldNames
返回:
字段名称的 String 数组。如果描述符为空,则将得到一个空数组。

equals

public boolean equals(Object o)
将此描述符与给定对象进行比较。如果给定对象也是一个 Descriptor,并且两个 Descriptor 具有相同的字段名(可能有不同的情况)且有相同的关联值,则对象相等。如果具备下列条件,则两个 Descriptor 中字段的各个值都相等:

  • 如果一个值为 null,则其他值也必须为 null。
  • 如果一个值是基本类型数组,则其他值必须是同一类型的基本类型数组,且具有相同的元素。
  • 如果一个值是对象数组,则其他值也必须是对象数组,并且 Arrays.deepEquals(Object[],Object[]) 必须返回 true。
  • 其他情况下,Object.equals(Object) 必须返回 true。

指定者:
接口 Descriptor 中的 equals
覆盖:
Object 中的 equals
参数:
o - 要与之比较的对象。
返回:
如果对象相等,则返回 true;否则返回 false
另请参见:
Object.hashCode(), Hashtable

hashCode

public int hashCode()

返回此描述符的哈希码值。该哈希码是描述符中每个字段的哈希码的总和。名称为 n 且值为 v 的字段的哈希码是 n.toLowerCase().hashCode() ^ h。这里的 hv 的哈希码,计算方式如下:

  • 如果 v 为 null,则 h 为 0。
  • 如果 v 是基本类型数组,则使用 java.util.Arrays.hashCode 的适当重载形式计算 h
  • 如果 v 是对象数组,则使用 Arrays.deepHashCode(Object[]) 计算 h
  • 否则,hv.hashCode()

指定者:
接口 Descriptor 中的 hashCode
覆盖:
Object 中的 hashCode
返回:
此对象的哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

toString

public String toString()
从类 Object 复制的描述
返回该对象的字符串表示。通常, toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())
 

覆盖:
Object 中的 toString
返回:
该对象的字符串表示形式。

isValid

public boolean isValid()
如果所有字段在给定其名称的情况下都有合法值,则返回 true。此方法总是返回 true,但子类可以重写它,以便在适当的时候返回 false。

指定者:
接口 Descriptor 中的 isValid
返回:
如果值是合法的,则返回 true。
抛出:
RuntimeOperationsException - 如果有效性检查失败。如果描述符无效,则该方法返回 false,但如果尝试确定有效性失败,则将抛出此异常。

clone

public Descriptor clone()

返回一个与此描述符相等的描述符。对返回的描述符进行的更改不影响此描述符,反之亦然。

此方法返回它调用的对象。子类可以重写此方法,以便在符合条件的情况下返回另一个对象。

指定者:
接口 Descriptor 中的 clone
覆盖:
Object 中的 clone
返回:
此实例的一个副本。
抛出:
RuntimeOperationsException - 如果 Names 或 Values 字段的值为非法值。如果描述符构造由于任何原因而失败,都将抛出此异常。
另请参见:
Cloneable

setFields

public final void setFields(String[] fieldNames,
                            Object[] fieldValues)
                     throws RuntimeOperationsException
因为此类不可变,所以不支持此操作。如果此调用此方法会更改具有相同内容的可变描述符,则抛出包装 UnsupportedOperationExceptionRuntimeOperationsException。否则,其行为将与可变描述符的行为相同:要么因为非法参数而抛出异常,要么无效。

指定者:
接口 Descriptor 中的 setFields
参数:
fieldNames - 字段名称的 String 数组。数组和数组元素不能为 null。
fieldValues - 对应字段值的 Object 数组。数组不能为 null。数组的元素可以为 null。
抛出:
RuntimeOperationsException - 如果由于某种原因更改失败。如果 fieldNamesfieldValues 为 null,或者数组的长度不同,或者其中一个数组存在非法值,则包装的异常为 IllegalArgumentException。如果描述符不可变,且调用将更改其内容,则包装的异常为 UnsupportedOperationException
另请参见:
Descriptor.getFields()

setField

public final void setField(String fieldName,
                           Object fieldValue)
                    throws RuntimeOperationsException
因为此类不可变,所以不支持此操作。如果此调用此方法会更改具有相同内容的可变描述符,则抛出包装 UnsupportedOperationExceptionRuntimeOperationsException。否则,其行为将与可变描述符的行为相同:要么因为非法参数而抛出异常,要么无效。

指定者:
接口 Descriptor 中的 setField
参数:
fieldName - 要设置的字段的名称。不能为 null 或空。
fieldValue - 针对该字段名称所设置的字段值。如果 null 是字段的有效值,则可以为 null。
抛出:
RuntimeOperationsException - 如果字段名或字段值不合法(包装的异常为 IllegalArgumentException);或者描述符不可变(包装的异常为 UnsupportedOperationException)。

removeField

public final void removeField(String fieldName)
从描述符移除字段。

指定者:
接口 Descriptor 中的 removeField
参数:
fieldName - 要移除的字段的 String 名称。如果字段名不合法或找不到字段,则不抛出任何异常。
抛出:
RuntimeOperationsException - 如果存在给定名称的字段且描述符不可变。包装的异常将是一个 UnsupportedOperationException