Module  java.management

Class DescriptorSupport

  • All Implemented Interfaces:
    SerializableCloneableDescriptor


    public class DescriptorSupport
    extends Object
    implements Descriptor
    此类表示一个ModelMBean元素的元数据集。 描述符是ModelMBeanInfo,ModelMBeanNotificationInfo,ModelMBeanAttributeInfo,ModelMBeanConstructorInfo和ModelMBeanParameterInfo的一部分。

    描述符由字段集合组成。 每个字段都是fieldname = fieldvalue格式。 字段名称不区分大小写,字段值将保留。

    所有字段名称和值都不是预定义的。 任何程序都可以定义和添加新的字段。 已经为ModelMBeanInfo,ModelMBeanAttributeInfo,ModelMBeanConstructorInfo,ModelMBeanNotificationInfo,ModelMBeanOperationInfo和ModelMBean类的实现和支持的一致性预定义了一些字段。

    该类的serialVersionUID-6292969195866300415L

    从以下版本开始:
    1.5
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • DescriptorSupport

        public DescriptorSupport​()
        描述符默认构造函数。 默认初始描述符大小为20.它将根据需要增长。
        请注意,创建的空描述符不是有效的描述符(方法isValid返回false
      • DescriptorSupport

        public DescriptorSupport​(int initNumFields)
                          throws MBeanException,
                                 RuntimeOperationsException
        描述符构造函数。 作为存储描述符字段的Map的初始容量的参数。 能力将根据需要增长。
        请注意,创建的空描述符不是有效的描述符(方法isValid返回false )。
        参数
        initNumFields - 映射存储描述符字段的初始容量。
        异常
        RuntimeOperationsException - 对于initNumFields(<= 0)的非法值
        MBeanException - 包装分布式通信异常。
      • DescriptorSupport

        public DescriptorSupport​(DescriptorSupport inDescr)
        描述符构造函数将描述符作为参数。 创建一个新的描述符,初始化为在参数中传递的描述符的值。
        参数
        inDescr - 用于初始化构造的描述符的描述符。 如果它为空或不包含描述符字段,则将创建一个空的描述符。
      • DescriptorSupport

        public DescriptorSupport​(String inStr)
                          throws MBeanException,
                                 RuntimeOperationsException,
                                 XMLParseException

        描述符构造函数采用XML字符串。

        未定义XML字符串的格式,但实现必须确保现有描述符上的toXMLString()返回的字符串可用于使用此构造函数实例化等效的描述符。

        在此实现中,所有字段值将被创建为字符串。 如果字段值不是字符串,程序员将不得不正确地重置或转换这些字段。

        参数
        inStr - 用于填充此描述符的XML格式的字符串。 格式未定义,但任何实现必须确保现有描述符上的方法toXMLString返回的字符串可用于在使用此构造函数实例化时实例化等效描述符。
        异常
        RuntimeOperationsException - 如果传入参数中的String inStr为null
        XMLParseException - 解析输入String时的XML解析问题
        MBeanException - 包装分布式通信异常。
      • DescriptorSupport

        public DescriptorSupport​(String[] fieldNames,
                                 Object[] fieldValues)
                          throws RuntimeOperationsException
        构造器获取字段名称和字段值。 两个数组都不能为空。
        参数
        fieldNames - 字符串数组字段名称。 此数组的任何元素都不能为空。
        fieldValues - 相应字段值的对象数组。 数组的元素可以为空。 fieldValue必须对fieldName有效(如方法isValid所定义)

        注意:参数的数组大小应该匹配。 如果两个数组都为空,则创建一个空描述符。

        异常
        RuntimeOperationsException - 对于字段名称或字段值的非法值。 阵列长度必须相等。 如果由于任何原因描述符构造失败,将抛出此异常。
      • DescriptorSupport

        public DescriptorSupport​(String... fields)
        构造器采用 fieldName = fieldValue格式的字段。
        参数
        fields - 每个元素包含字段名称和值的字符串数组。 如果此数组为空或为空,则将执行默认构造函数。 空字符串或空字符串将被忽略。

        所有字段值应为字符串。 如果字段值不是字符串,程序员将不得不正确地重置或转换这些字段。

        注意:每个字符串的格式应为fieldName = fieldValue 字段名称以第=字符结尾; 例如,如果字符串为a=b=c则字段名称为a ,其值为b=c

        异常
        RuntimeOperationsException - 对于字段名称或字段值的非法值。 该字段必须包含“=”。 “= fieldValue”,“fieldName”和“fieldValue”是非法的。 FieldName不能为空。 “fieldName =”将导致该值为null。 如果由于任何原因描述符构造失败,将抛出此异常。
    • 方法详细信息

      • setField

        public void setField​(String fieldName,
                             Object fieldValue)
                      throws RuntimeOperationsException
        描述从接口Descriptor复制

        设置特定字段名称的值。 这将修改现有字段或添加新字段。

        字段值在设置之前将被验证。 如果它无效,那么将抛出异常。 有效性的含义取决于描述符的实现。

        Specified by:
        setField在接口 Descriptor
        参数
        fieldName - 要设置的字段名称。 不能为null或为空。
        fieldValue - 要为字段名称设置的字段值。 如果该值是该字段的有效值,则可以为null。
        异常
        RuntimeOperationsException - 如果字段名称或字段值是非法的(包装异常是IllegalArgumentException ); 或者描述符是不可变的(包装异常是UnsupportedOperationException )。
      • getFields

        public String[] getFields​()
        说明从界面Descriptor复制
        以字符串数组的形式返回此描述符中包含的所有字段。
        Specified by:
        getFields在接口 Descriptor
        结果
        字符串数组的字段格式为fieldName = fieldValue
        如果字段的值不是String,那么将调用toString()方法,并将包含在括号中的返回值用作返回数组中字段的值。 如果一个字段的值为null,那么返回的数组中的字段的值将为空。 如果描述符为空,您将获得一个空数组。
        另请参见:
        Descriptor.setFields(java.lang.String[], java.lang.Object[])
      • getFieldNames

        public String[] getFieldNames​()
        描述从接口Descriptor复制
        返回描述符中的所有字段名。
        Specified by:
        getFieldNames在接口 Descriptor
        结果
        字符串数组字段名称。 如果描述符为空,您将获得一个空数组。
      • getFieldValues

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

        public void setFields​(String[] fieldNames,
                              Object[] fieldValues)
                       throws RuntimeOperationsException
        说明从界面Descriptor复制

        将字段名称数组中的所有字段设置为字段值数组中具有相同索引的新值。 阵列大小必须匹配。

        字段值在设置之前将被验证。 如果它无效,那么将抛出异常。 如果数组为空,那么没有更改将生效。

        Specified by:
        setFields在接口 Descriptor
        参数
        fieldNames - 字符串数组字段名称。 数组和数组元素不能为空。
        fieldValues - 相应字段值的对象数组。 数组不能为null。 数组的元素可以为空。
        异常
        RuntimeOperationsException - 如果由于任何原因更改失败。 如果fieldNamesfieldValues为空,则包装的例外为IllegalArgumentException ,或者如果数组的长度不同,或者其中一个中存在非法值。 如果描述符是不可变的,则包装的异常是UnsupportedOperationException ,并且调用将改变其内容。
        另请参见:
        Descriptor.getFields()
      • removeField

        public void removeField​(String fieldName)
        说明从界面Descriptor复制
        从描述符中删除一个字段。
        Specified by:
        removeField在接口 Descriptor
        参数
        fieldName - 要删除的字段的字符串名称。 如果字段名称是非法的或没有找到该字段,则不会抛出异常。
      • equals

        public boolean equals​(Object o)
        将此描述符与给定对象进行比较。 如果给定的对象也是描述符,并且两个描述符具有相同的字段名称(可能在不同情况下)和相同的关联值,则对象是相等的。 如果满足以下条件,两个描述符中的字段的相应值相等:
        • 如果一个值为null,那么另一个值也是。
        • 如果一个值是原始数组,则另一个值必须是具有相同元素的相同类型的原始数组。
        • 如果一个值是一个对象数组,那么另一个值必须也是,并且Arrays.deepEquals必须返回true。
        • 否则Object.equals(Object)必须返回true。
        Specified by:
        equals在接口 Descriptor
        重写:
        equalsObject
        参数
        o - 要比较的对象。
        结果
        true如果对象是相同的; 否则为false
        另请参见:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode​()

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

        • 如果v为空,则h为0。
        • 如果v是基本类型数组然后h使用的适当重载来计算java.util.Arrays.hashCode
        • 如果v是一个对象数组然后h使用计算Arrays.deepHashCode
        • 否则hv.hashCode()
        Specified by:
        hashCode在接口 Descriptor
        重写:
        hashCodeObject
        结果
        此对象的哈希码值。
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • isValid

        public boolean isValid​()
                        throws RuntimeOperationsException
        如果所有字段都具有给定名称的合法值,则返回true。

        此实现不支持与目录或查找服务进行互操作。 因此,符合规范,不会在“导出”字段上进行检查。

        否则,此实现返回false,如果:

        • name和descriptorType fieldNames未定义,或null或空,或不为String
        • class,role,getMethod,setMethod fieldNames,如果定义,则为null或不为String
        • persistPeriod,currencyTimeLimit,lastUpdatedTimeStamp,lastReturnedTimeStamp如果定义,则为null,或不是数值字符串或不是数值> = -1
        • log fieldName(如果已定义)为null,或不是布尔值,或不是值为“t”,“f”,“true”,“false”的字符串。 这些字符串值不能区分大小写。
        • 可见性字段名(如果已定义)为空,或不是数字字符串或非数字值> = 1和<= 4
        • 严重性fieldName(如果定义)为null,或不是数字字符串,或不是数值> = 0和<= 6
        • persistPolicy fieldName(如果已定义)为null,或不是以下字符串之一:
          “OnUpdate”,“OnTimer”,“NoMoreOftenThan”,“OnUnregister”,“Always”,“Never”。 这些字符串值不能区分大小写。
        Specified by:
        isValid在接口 Descriptor
        结果
        如果值合法,则为真。
        异常
        RuntimeOperationsException - 如果由于任何原因有效性检查失败,将抛出此异常。
      • toXMLString

        public String toXMLString​()

        返回表示描述符的XML字符串。

        格式未定义,但是实现必须确保使用构造函数DescriptorSupport(String inStr)实例化时可以使用此方法返回的字符串来构建等效描述符。

        不是String对象的字段将在其上调用toString()来创建该值。 该值将括在括号中。 不能保证您可以重建这些对象,除非它们被专门设置为以有意义的格式支持toString(),并具有以相同格式接受String的匹配构造函数。

        如果描述符为空,则返回以下String:<Descriptor> </ Descriptor>

        结果
        XML字符串。
        异常
        RuntimeOperationsException - 用于字段名称或字段值的非法值。 如果由于任何原因XML格式的字符串构造失败,将抛出此异常。
      • toString

        public String toString​()
        返回表示描述符的人类可读字符串。 字符串的格式为“fieldName = fieldValue,fieldName2 = fieldValue2 ...”
        如果描述符中没有字段,则返回一个空字符串。
        如果一个fieldValue是一个对象,那么将调用toString()方法,并将其返回值用作括号中的字段的值。
        重写:
        toStringObject
        结果
        对象的字符串表示形式。
        异常
        RuntimeOperationsException - 用于字段名称或字段值的非法值。 如果描述符字符串由于任何原因失败,将抛出此异常。