属性集定义了一组属性,属性集的实例包含部分属性的具体值。没有包含的属性等同于属性值为null。
属性集实例可以包含额外的属性和值,这些属性只能通过字符串名称索引,并且在读取、设置时没有类型检查。
需求定义
项目 | 边界 | 说明 |
父属性集 | 动态修改 不必同类型 循环检查 | 只在读取时有用 |
属性管理 |
|
|
设置 | 设置的权限 |
|
读取 | 递归/不递归父属性集 默认值 判断是否存在 |
|
合并 | 完全赋值 自身优先/外部优先 深度合并 排除外部键 仅简单属性(-1深度) 单键合并 | 递归属性集时,不消耗深度
|
清空 |
|
|
字符串键 | 查找属性键 |
|
设置 | 字符串值(须可配置) 泛型值(须可设置) | 字符串值转换为属性类型 泛型值也可能是字符串,如果需要,额外转换一次 |
读取 | 泛型默认值 字符串默认值 | 属性值转换为字符串 泛型默认值时,仍返回泛型值 泛型值也可能是字符串,如果需要,尝试调用字符串默认值 |
序列化 |
|
|
Parcel | CREATOR辅助类 |
|
Serialize | 排除非可序列化属性 |
|
String Map | 排除非可配置属性 |
|
Properties |
|
|
To map | 包含/不包含父属性集 递归属性集类型属性 仅简单属性 |
|
Dumpable |
|
|
deepTo String |
|
|
基本接口 |
|
|
equals |
|
|
clone |
|
|
属性值 | 可派生自定义 |
|
可选值 |
|
|
字符串化 |
|
|
值标题 |
|
|
读取属性值
可以通过属性(Key)为索引,读取属性集中的属性,返回null表示该属性的值未设置。
也可以通过属性的名称(String)为索引读取属性值,返回的值用字符串表示(格式化)如果该名称不是任何已定义属性的名称,需要属性集派生类自行处理。
支持通过特定接口,以名称为索引,直接返回属性值(不序列化)。
设置属性值
也可以通过属性的名称(String)为索引设置属性值,传入的值是String类型,解析为属性描述的实际类型。仅可配置类型的属性,可以通过这种方式设置。如果该名称不是任何已定义属性的名称,需要属性集派生类以重载方式自行处理。派生类在重载该接口时,建议让父类处理已定义的属性。
还支持通过特定接口,以名称为索引,直接设置属性值(不解析),有类型检查。类型检查失败,同时传入的值是String类型,则尝试解析后重试。仅可写类型的属性,可以通过这种方式设置。同上,如果该名称不是任何已定义属性的名称,需要属性集派生类以继承方式自行处理。
属性集继承
属性集继承有两个方面,一个是属性集类型继承,另一个是属性集实例继承。
属性集类型继承时,属性集继承父类的所有定义的属性,也可以覆盖,但是一般不这么做。
属性集实例继承时,属性集实例继承另一个实例的对应属性值,可以覆盖,覆盖是很常见的,比如用在处理配置情形时,当前配置继承默认配置。两者的实际属性集类型是有继承关系的(可能是间接的),他们有相同的属性。
属性集合并