Module java.management
Package javax.management

Class ImmutableDescriptor

java.lang.Object
javax.management.ImmutableDescriptor
所有已实现的接口:
Serializable, Cloneable, Descriptor

public class ImmutableDescriptor extends Object implements Descriptor
一个不可变的描述符。
自版本:
1.6
参见:
  • Field Details

    • EMPTY_DESCRIPTOR

      public static final ImmutableDescriptor EMPTY_DESCRIPTOR
      一个空的描述符。
  • Constructor Details

    • ImmutableDescriptor

      public ImmutableDescriptor(String[] fieldNames, Object[] fieldValues)
      包含给定字段和值的描述符。
      参数:
      fieldNames - 字段名称
      fieldValues - 字段值
      抛出:
      IllegalArgumentException - 如果任一数组为null,或者数组大小不同,或者字段名称为null或空,或者相同字段名称出现多次。
    • ImmutableDescriptor

      public ImmutableDescriptor(String... fields)
      包含给定字段的描述符。每个字符串必须是fieldName=fieldValue的形式。字段名称在第一个=字符处结束;例如,如果字符串是a=b=c,则字段名称是a,其值是b=c
      参数:
      fields - 字段名称
      抛出:
      IllegalArgumentException - 如果参数为null,或者字段名称为空,或者相同字段名称出现多次,或者其中一个字符串不包含=字符。
    • ImmutableDescriptor

      public ImmutableDescriptor(Map<String,?> fields)

      字段的名称和值是给定Map的键和值的描述符。

      参数:
      fields - 字段名称和值
      抛出:
      IllegalArgumentException - 如果参数为null,或者字段名称为null或空,或者相同字段名称出现多次(因为字段名称不区分大小写)。
  • Method Details

    • union

      public static ImmutableDescriptor union(Descriptor... descriptors)

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

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

       Descriptor d = something();
       ImmutableDescriptor copy = ImmutableDescriptor.union(d);
       
      参数:
      descriptors - 要合并的描述符。任何描述符都可以为null,在这种情况下将被跳过。
      返回:
      一个ImmutableDescriptor,它是给定描述符的并集。如果返回的对象是包含所有必需字段的ImmutableDescriptor,则可能与输入描述符之一相同。
      抛出:
      IllegalArgumentException - 如果两个描述符包含具有不同关联值的相同字段名称。如果原始数组值是相同类型且具有相同元素的原始数组值,则将认为它们相同。如果对象数组值也是如此,并且Arrays.deepEquals(Object[],Object[])返回true,则认为它们相同。
    • getFieldValue

      public final Object getFieldValue(String fieldName)
      从接口复制的描述: Descriptor
      返回特定字段名称的值,如果该名称没有值则返回null。
      指定者:
      getFieldValue 在接口 Descriptor
      参数:
      fieldName - 字段名称。
      返回:
      相应的值,如果字段不存在则返回null。
    • getFields

      public final String[] getFields()
      从接口复制的描述: Descriptor
      返回此描述符中包含的所有字段作为字符串数组。
      指定者:
      getFields 在接口 Descriptor
      返回:
      fieldName=fieldValue格式的字段的字符串数组
      如果字段的值不是字符串,则将调用其toString()方法,并将返回的值(用括号括起来)用作返回数组中字段的值。如果字段的值为null,则返回数组中字段的值为空。如果描述符为空,则将获得一个空数组。
      参见:
    • getFieldValues

      public final Object[] getFieldValues(String... fieldNames)
      从接口复制的描述: Descriptor
      返回描述符中所有字段值的对象数组。返回的值与fieldNames字符串数组参数的顺序相同。
      指定者:
      getFieldValues 在接口 Descriptor
      参数:
      fieldNames - 字段名称的字符串数组,应返回其值。如果数组为空,则将返回一个空数组。如果数组为null,则将返回所有值,就像参数是由Descriptor.getFieldNames()返回的数组一样。如果数组中的字段名称不存在,包括为空或空字符串的情况,则将为要返回的匹配数组元素返回null。
      返回:
      字段值的对象数组。如果fieldNames列表为空,则将获得一个空数组。
    • getFieldNames

      public final String[] getFieldNames()
      从接口复制的描述: Descriptor
      返回描述符中的所有字段名称。
      指定者:
      getFieldNames 在接口 Descriptor
      返回:
      字段名称的字符串数组。如果描述符为空,则将获得一个空数组。
    • equals

      public boolean equals(Object o)
      将此描述符与给定对象进行比较。如果给定对象也是描述符,并且两个描述符具有相同的字段名称(可能在大小写上有所不同)和相同的关联值,则对象相等。如果两个描述符中的字段的值相等,则满足以下条件:
      • 如果一个值为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。这里hv的哈希码,计算如下:

      • 如果v为null,则h为0。
      • 如果v是原始数组,则使用适当的java.util.Arrays.hashCode重载来计算h
      • 如果v是对象数组,则使用Arrays.deepHashCode(Object[])来计算h
      • 否则hv.hashCode()
      指定者:
      hashCode 在接口 Descriptor
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见:
    • isValid

      public boolean isValid()
      如果所有字段的值在给定其名称的情况下都合法,则返回true。此方法始终返回true,但子类可以在适当时覆盖它以返回false。
      指定者:
      isValid 在接口 Descriptor
      返回:
      如果值合法则返回true。
      抛出:
      RuntimeOperationsException - 如果有效性检查失败。如果描述符无效,则该方法返回false,但如果确定有效性的尝试失败,则会抛出此异常。
    • clone

      public Descriptor clone()

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

      此方法返回调用它的对象。子类可以覆盖它以返回另一个对象,只要遵守合同即可。

      指定者:
      clone 在接口 Descriptor
      覆盖:
      clone 在类 Object
      返回:
      此实例的克隆。
      抛出:
      RuntimeOperationsException - 对于字段名称或字段值的非法值。如果由于任何原因描述符构造失败,则将抛出此异常。
      参见:
    • setFields

      public final void setFields(String[] fieldNames, Object[] fieldValues) throws RuntimeOperationsException
      由于此类是不可变的,因此不支持此操作。如果此调用将更改具有相同内容的可变描述符,则会抛出包装了RuntimeOperationsExceptionUnsupportedOperationException。否则,行为与对可变描述符的行为相同:由于非法参数而抛出异常,或者没有效果。
      指定者:
      setFields 在接口 Descriptor
      参数:
      fieldNames - 字段名称的字符串数组。数组和数组元素不能为null。
      fieldValues - 相应字段值的对象数组。数组不能为null。数组的元素可以为null。
      抛出:
      RuntimeOperationsException - 如果更改由于任何原因失败。如果fieldNamesfieldValues为null,或者数组长度不同,或者其中一个中存在非法值,则包装的异常为IllegalArgumentException。如果描述符是不可变的,并且调用将更改其内容,则包装的异常为UnsupportedOperationException
      参见:
    • setField

      public final void setField(String fieldName, Object fieldValue) throws RuntimeOperationsException
      由于此类是不可变的,因此不支持此操作。如果此调用将更改具有相同内容的可变描述符,则会抛出包装了RuntimeOperationsExceptionUnsupportedOperationException。否则,行为与对可变描述符的行为相同:由于非法参数而抛出异常,或者没有效果。
      指定者:
      setField 在接口 Descriptor
      参数:
      fieldName - 要设置的字段名称。不能为null或空。
      fieldValue - 要为字段名称设置的字段值。如果这是字段的有效值,则可以为null。
      抛出:
      RuntimeOperationsException - 如果字段名称或字段值非法(包装的异常为IllegalArgumentException);或者如果描述符是不可变的(包装的异常为UnsupportedOperationException)。
    • removeField

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