Android 基础库 - 属性系统 - 属性集

属性集定义了一组属性,属性集的实例包含部分属性的具体值。没有包含的属性等同于属性值为null。

属性集实例可以包含额外的属性和值,这些属性只能通过字符串名称索引,并且在读取、设置时没有类型检查。

需求定义

项目

边界

说明

父属性集

动态修改

不必同类型

循环检查

只在读取时有用

属性管理

 

 

设置

设置的权限

 

读取

递归/不递归父属性集

默认值

判断是否存在

 

合并

完全赋值

自身优先/外部优先

深度合并

排除外部键

仅简单属性(-1深度)

单键合并

递归属性集时,不消耗深度

 

清空

 

 

字符串键

查找属性键

 

设置

字符串值(须可配置)

泛型值(须可设置)

字符串值转换为属性类型

泛型值也可能是字符串,如果需要,额外转换一次

读取

泛型默认值

字符串默认值

属性值转换为字符串

泛型默认值时,仍返回泛型值

泛型值也可能是字符串,如果需要,尝试调用字符串默认值

序列化

 

 

Parcel

CREATOR辅助类

 

Serialize

排除非可序列化属性

 

String Map

排除非可配置属性

 

Properties

 

 

To map

包含/不包含父属性集

递归属性集类型属性

仅简单属性

 

Dumpable

 

 

deepTo

String

 

 

基本接口

 

 

equals

 

 

clone

 

 

属性值

可派生自定义

 

可选值

 

 

字符串化

 

 

值标题

 

 

读取属性值

可以通过属性(Key)为索引,读取属性集中的属性,返回null表示该属性的值未设置。

也可以通过属性的名称(String)为索引读取属性值,返回的值用字符串表示(格式化)如果该名称不是任何已定义属性的名称,需要属性集派生类自行处理。

支持通过特定接口,以名称为索引,直接返回属性值(不序列化)。

设置属性值

可以通过属性(Key)为索引,设置属性集中的属性,设置null表示删除该属性对应的值。针对不同的属性类型(只读取、可设置、可配置),有不同的设置接口。对应只读取属性,接口仅能在派生类中调用;对于可设置属性,默认调用设置只读属性的接口;对于可配置属性,默认调用设置可设置属性的接口。派生类在重载这3个接口时需要注意,需调用父类相应的接口进行默认处理。

也可以通过属性的名称(String)为索引设置属性值,传入的值是String类型,解析为属性描述的实际类型。仅可配置类型的属性,可以通过这种方式设置。如果该名称不是任何已定义属性的名称,需要属性集派生类以重载方式自行处理。派生类在重载该接口时,建议让父类处理已定义的属性。

还支持通过特定接口,以名称为索引,直接设置属性值(不解析),有类型检查。类型检查失败,同时传入的值是String类型,则尝试解析后重试。仅可写类型的属性,可以通过这种方式设置。同上,如果该名称不是任何已定义属性的名称,需要属性集派生类以继承方式自行处理。

属性集继承

属性集继承有两个方面,一个是属性集类型继承,另一个是属性集实例继承。

属性集类型继承时,属性集继承父类的所有定义的属性,也可以覆盖,但是一般不这么做。

属性集实例继承时,属性集实例继承另一个实例的对应属性值,可以覆盖,覆盖是很常见的,比如用在处理配置情形时,当前配置继承默认配置。两者的实际属性集类型是有继承关系的(可能是间接的),他们有相同的属性。

属性集合并

 

猜你喜欢

转载自blog.csdn.net/luansxx/article/details/82852279