public class ImmutableDescriptor extends Object implements Descriptor
Modifier and Type | Field and Description |
---|---|
static ImmutableDescriptor |
EMPTY_DESCRIPTOR
一个空描述符。
|
Constructor and Description |
---|
ImmutableDescriptor(Map<String,?> fields)
构造描述符,其中字段的名称和值是给定Map的键和值。
|
ImmutableDescriptor(String... fields)
构造一个包含给定字段的描述符。
|
ImmutableDescriptor(String[] fieldNames, Object[] fieldValues)
构造一个包含给定字段和值的描述符。
|
Modifier and Type | Method and Description |
---|---|
Descriptor |
clone()
返回一个等于该描述符的描述符。
|
boolean |
equals(Object o)
将此描述符与给定对象进行比较。
|
String[] |
getFieldNames()
返回描述符中的所有字段名。
|
String[] |
getFields()
以字符串数组的形式返回此描述符中包含的所有字段。
|
Object |
getFieldValue(String fieldName)
返回特定字段名称的值,如果该名称没有值,则返回null。
|
Object[] |
getFieldValues(String... fieldNames)
将描述符中的所有字段值作为对象数组返回。
|
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 ,其内容是给定描述符的并集。
|
public static final ImmutableDescriptor EMPTY_DESCRIPTOR
public ImmutableDescriptor(String[] fieldNames, Object[] fieldValues)
IllegalArgumentException
- 如果任一数组为空,或者数组的大小不同,或者字段名称为空或为空,或者同一个字段名称多次出现。
public ImmutableDescriptor(String... fields)
fieldName=fieldValue
。
字段名称以第=
字符结尾;
例如,如果字符串为a=b=c
则字段名称为a
,其值为b=c
。
IllegalArgumentException
- 如果参数为空,或者字段名称为空,或者同一个字段名称多次出现,或者其中一个字符串不包含
=
字符。
public ImmutableDescriptor(Map<String,?> fields)
构造描述符,其中字段的名称和值是给定Map的键和值。
IllegalArgumentException
- 如果参数为空,或者字段名称为空或为空,或者同一个字段名称多次出现(由于字段名不区分大小写)。
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,对象数组值将被视为相同。
public final Object getFieldValue(String fieldName)
Descriptor
复制
getFieldValue
在界面
Descriptor
fieldName
- 字段名称。
public final String[] getFields()
Descriptor
复制
getFields
在界面
Descriptor
Descriptor.setFields(java.lang.String[], java.lang.Object[])
public final Object[] getFieldValues(String... fieldNames)
Descriptor
复制
fieldNames
String数组参数的顺序相同。
getFieldValues
在界面
Descriptor
fieldNames
- 应返回值的字段名称的字符串数组。
如果数组为空,那么将返回一个空数组。
如果数组为空,那么将返回所有值,就像该参数是由Descriptor.getFieldNames()
返回的数组一样 。
如果数组中的字段名称不存在,包括其为空或空字符串的情况,那么返回的匹配数组元素将返回null。
fieldNames
的列表为空,您将获得一个空数组。
public final String[] getFieldNames()
Descriptor
复制
getFieldNames
在界面
Descriptor
public boolean equals(Object o)
Arrays.deepEquals(Object[],Object[])
必须返回true。 Object.equals(Object)
必须返回true。 equals
在接口
Descriptor
equals
在
Object
o
- 要比较的对象。
true
如果对象是一样的;
false
否则。
Object.hashCode()
, HashMap
public int hashCode()
返回此描述符的哈希码值。 哈希码被计算为描述符中每个字段的哈希码的和。 名称为n
,值为v
的字段的哈希码为n.toLowerCase().hashCode() ^ h
。 这里h
是哈希码v
,计算如下:
v
为null,则h
为0。 v
是基本类型数组然后h
使用的适当重载来计算的java.util.Arrays.hashCode
。 v
是一个对象数组然后h
使用计算Arrays.deepHashCode(Object[])
。 h
是v.hashCode()
。 hashCode
在接口
Descriptor
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public String toString()
Object
toString
方法返回一个“textually代表”这个对象的字符串。
结果应该是一个简明扼要的表达,容易让人阅读。
建议所有子类覆盖此方法。
该toString
类方法Object
返回一个由其中的对象是一个实例,该符号字符`的类的名称的字符串@
”和对象的哈希码的无符号的十六进制表示。 换句话说,这个方法返回一个等于下列值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
public boolean isValid()
isValid
在界面
Descriptor
RuntimeOperationsException
- 如果有效性检查失败。
如果描述符无效,该方法返回false,但如果尝试确定有效性失败,则返回此异常。
public Descriptor clone()
返回一个等于该描述符的描述符。 返回的描述符的更改对此描述符没有影响,反之亦然。
此方法返回调用它的对象。 一个子类可以覆盖它,以返回另一个对象,只要合同得到尊重。
clone
在界面
Descriptor
clone
在
Object
RuntimeOperationsException
- 用于字段名称或字段值的非法值。
如果由于任何原因描述符构造失败,将抛出此异常。
Cloneable
public final void setFields(String[] fieldNames, Object[] fieldValues) throws RuntimeOperationsException
UnsupportedOperationException
的UnsupportedOperationException
。
否则,行为与可变描述符相同:由于非法参数引起异常,或者没有任何效果。
setFields
在界面
Descriptor
fieldNames
- 字段名称的字符串数组。
数组和数组元素不能为空。
fieldValues
- 相应字段值的对象数组。
数组不能为null。
数组的元素可以为空。
RuntimeOperationsException
- 如果由于任何原因更改失败。
如果fieldNames
或fieldValues
为空,或者如果数组的长度不同,或者其中一个中存在非法值,则包装的异常为IllegalArgumentException
。
包装的异常是UnsupportedOperationException
如果描述符是不可变的,而调用将更改其内容。
Descriptor.getFields()
public final void setField(String fieldName, Object fieldValue) throws RuntimeOperationsException
RuntimeOperationsException
包装UnsupportedOperationException
。
否则,行为与可变描述符相同:由于非法参数引起异常,或者没有任何效果。
setField
在界面
Descriptor
fieldName
- 要设置的字段名称。
不能为null或为空。
fieldValue
- 要为字段名称设置的字段值。
如果该值是该字段的有效值,则可以为null。
RuntimeOperationsException
- 如果字段名称或字段值是非法的(包装异常是IllegalArgumentException
);
或者如果描述符是不可变的(包装异常是UnsupportedOperationException
)。
public final void removeField(String fieldName)
removeField
在接口
Descriptor
fieldName
- 要删除的字段的字符串名称。
如果字段名称是非法的或没有找到该字段,则不会抛出异常。
RuntimeOperationsException
- if a field of the given name exists and the descriptor is immutable. The wrapped exception will be an
UnsupportedOperationException
.