PropertySheet Modifier API

Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。修饰符集被表示为整数,用不同的位
public class PropertySheet implements Cloneable
注意:PropertySheet 实例化指它的Owner不为null,当我们的程序需要某个component时它的ps必须实例化。component是配置文件xml中的概念,是字符串或由字符串组成的,而configurable是编程代码中的概念,是类,或对象的实例。我们从配置文件中载入最终是要获得编程中的类,对象,类实例,对象属性等实际程序运行需要的东西。因此存在着把xml文件中的东西转换成程序运行所需的类,对象,对象属性的一系列方法类和操作。而本类就是这样的一个类,它把xml文件中的一个component中的所有内容,转成一个包含此component的configurable的类,类实例,对象,对象各种属性,对象属性有在xml文件中设置的,有默认设置的。默认的属性在registerProperties通过annotation获得,xml设置的属性在propValues中。当我们要获得对象的某属性时,先检查的propValues 中是否存在,如果存在则转换成相应的对象输出,如果不存在则通过registerProperties获得默认的属性输出。registerProperties中的内容通过registerProperty方法放入。没有通过构造方法获得。每个PropertySheet都属于一个configurable。
本类的主要作用:本类用于对component(configurable)类(对象)属性(properties)的更新,改变。的一个本类的实例等价一个component类的实例,由于sphinx4是以模块化的方式构建的,每个模块由可配置对象组成.我们可以有两种方式来构建我们自己的sphnx4的程序。一是通过配置文件的方式,2是通过自己写代码动态的方式。对通过配置文件的方式,我们知道我们从xml读取的所有component的内容放入了RawPropertyData类的实例中,
RawPropertyData类属性为字符串和一个map(map内为字符串)。它并不能等效于component类,但是当我们在sphinx中写xml配置文件的目的是为了使我们不需以写代码的方式来创建系统所需的component类如recognizer,front-end等可config(可配置)类。所以需要一种类可以等效于component实例的。而本类恰好是component实例的代替物。
本类的属性:
String instanceName,即为配置xml文件中component标记的name的属性值。代表的component(configurable)类的实例(对象)名。
Class<? extends Configurable> ownerClass,即为component标记的value的属性值(字符串)转换得到的Class类对象。从此Class类我们得到与此Class类一一对应的component(configuraable)类的实例,方法,属性等。与Class类一一对应的component(configuraable)类,它们之间完全等价的。只是Class类是在虚拟机中的。
Configurable owner,即为与ownerClass类对象一一对应的component(configuraable)类对象。
Map<String, Object> propValues,PropValue的每一项为property的name和value对或propertylist与所有的item即(itemlist)对,也可以说PropValue的每一项为String到String对或String到ArrayList(String)对。propValues存储着component标记的properties。即一个component的属性,只是它都是以字符串形式的,需要时要转换成类的形式。注意PropValue是不可能包含${}形式的,它把${}用相应的globalproperty的value值代替。
Map<String, Object> rawProps,除了不会用globalproperty的value值代替${}形式外,其余都是一样的。rawProps可以${}形式的property 的value。即它是没经过处理的component的properties。
Map<String, S4PropWrapper> registeredProperties:为注册的Properties,为configurable的属性和属性的annotation对。所有可用的property或propertylist其name都必须在registeredProperties中存在,即被注册。所有的默认设置的值都会存在于registeredProperties中。获得属性时,先propValues找,没找到在通过registeredProperties找到默认值。
本的构造方法
PropertySheet(Configurable configurable, String name, RawPropertyData rpd, ConfigurationManager ConfigurationManager),PropertySheet(Class<? extends Configurable> confClass, String name, ConfigurationManager cm, RawPropertyData rpd):对registerProperty,propValues,ownerClass,instanceName,cm,rawprops进行了初始化。都为不是null。
本类的主要方法
1,void registerProperty(String propName, S4PropWrapper property):本方法查看registeredProperties和propValues 看其是否含有propName,没有加添加进入,并把propValues 中propName对应得value设为null的。有的话就什么也不做。
2,S4PropWrapper getProperty(String name, Class<?> propertyClass):本方法得到registeredProperties中的S4PropWrapper,并把S4PropWrapper中的proxy转换为propertyClass的对象。本方法返回S4PropWrapper对象。propValues中需含有此name。
3,String getString(String name):如果propValues有与输入name对应的Object(即不为null),那么得到其Object并将object转换成String字符串输出,如果propValues中没有与之对应的Object即为object为null,则获得S4String(annotation)中相对应设置的默认值(默认值可以是使用时的设置或定义annotation时的设置)。并把默认值放入propValues的value,输出转换为字符串的默认值。
4,String flattenProp(String name):本方法通过输入的name得到propValues中与之对应的项即Object 看其是是否是字符串的实例,是则把object专换成String 输出,否则输出为null。
5,int getInt(String name):本方法与getString方法的处理方式是一样的只是输出为int元素。即看其有没有在配置文件中设置,有的话,把配置文中相应的设置改变成int型输出。没有的话把annotation中的默认设置放入相应的property中,并输出默认设置改成int型输出。
6,double getDouble(String name):本法于getInt,getString方法的处理是一致的,输出为double型。
7,float getFloat(String name):本方法使用了getDouble方法,把得到的double型输出转换为float输出。其余的与getDouble一样。
8,Boolean getBoolean(String name):与getInt,getString等方法一样,输出的是Boolean。
9, Configurable getComponent(String name):本方法查看在propValues是否存在着与name相对应的object,有的话得到其object并检验其是否是Configurable类型,是的话就输出此Configurable对象,不是的话一般情况下不是Configurable类型的,而是String,因为在xml文件中的都是字符串。所有需得到此字符串所表示的component的对象,而在与此component相关propertysheet是存在着此component的configurable对象的,因此通过ConfigurationManager中方法得到ps,在通过ps得到configurable对象,然后把name-configurable对存入propValues中。在输出此configurable对象。如在propValues没有与name对应的值,则通过getComponentFromAnnotation方法获得默认configurable对象,输出此默认configurable对象。
10,Configurable getComponentFromAnnotation(String name, S4Component s4Component):本方法是重annotation中获得设置的defaultClass类对象,通过对此Class类的实例化操作获得configurable对象。在此类中检测了defaultClass的修饰,防止其为抽象Class类。
11,Class<? extends Configurable> getComponentClass(String propName):本方法是如propValues中存在与propName对应的object,则获得此object对应的Class对象。并输出。如果在propValues中没有存在与propName对应的object即object为null,则通过registeredProperties获得默认设置的Class对象。并输出。
12,List<String> getStringList(String name):本法根据propValues根据输入name获得与name相应的objec后,转换为list<String>,其实本方法获得的是component中的所有item标记的字符串列表。
13,<T> List<T> getComponentList(String name, Class<T> tclass):本方法是先在propValues与name相对应的,找到了转换成ArrayList<T>,其中T的类型为tclass的类型,输出。如果没找到则通过S4ComponentList annotation = (S4ComponentList) registeredProperties.get(name).getAnnotation(),找到默认设置,再转换成ArrayList<T>输出。
14,List<URL> getResourceList(String name):本通过了本类的getString方法得到了于name相对应的字符串,然后根据字符串中的;号来获得子字符串,并把字符串都转换成URL放入List<URL>中,再返回List<URL>.在xml中多个资源相同类型的资源的位置可用一个字符串来表示,中间用;隔开。
15,String getInstanceName():获得本propertysheet的InstanceName属性,为component中的name标记值。
16,setInstanceName(String newInstanceName):设置新的InstanceName。
17,boolean isInstanciated():检测本类对象的configurable owner。
18,synchronized Configurable getOwner():本方法是线程安全的,得到本对象的owner,如果owner对象不存在则通过OwnerClass对象来生成一个owner,输出此owner。
19,Collection<String> getUndefinedMandatoryProps():本方法先得到RegisteredProperties中的所有propname,得到propname对应的S4PropWrapper,得到相应的annotation,与S4Component,S4String,S4Integer,S4Double相检查,得到其中没有定义attribute,在通过propValues.get(propName)得到UndefinedMandatoryProps。本方法得到的是没有通过annotation进行默认设置的属性(值)。
20,Class<? extends Configurable> getConfigurableClass():本方法得到本propertysheet对象的OwnerClass的Class对象。
21,setConfigurableClass(Class<? extends Configurable> confClass):本法是设置ownerClass的Class类对象,需在ownerClass没有产生实例configurable对象的情况下进行设置,并把默认设置注册即进行registerProperty操作。registerProperty进行的赋值。
22,static Map<Field, Annotation> parseClass(Class<? extends Configurable> configurable):本方法得到的Filed是component的property即configurable中的所有通过@S4Property修饰的annotation默认设置的属性,Annotation是此Filed上的annotation。即所有的可默认设置的property都会放入输出中。
23,setString(String name, String value):本方法是对configurable进行更新用的,对于在registeredProperties存在的name进行设置,并且name上的annotation需为字符串。调用applyConfigurationChange方法对整个propertysheet进行更新,并对component进行属性的更新。
24,setInt(String name, int value):与setstring的目的和处理过程一样。
25,setDouble(String name, double value):与setstring的目的和处理过程一样。
26,setBoolean(String name, Boolean value):与setstring的目的和处理过程一样。
27,setComponent(String name, String cmName, Configurable value):与setstring的目的和处理过程一样。
28,setComponentList(String name, List<String> valueNames, List<Configurable> value):与setstring的目的和处理过程一样。
29,applyConfigurationChange(String propName, Object cmName, Object value):本方法是实际对propertysheet和相应的configurable进行更新的操作。
30,setRaw(String key, Object val):本方法仅对rawproperty和propvalues进行改变,但是configurable并没有立即更新。
31,Object getRaw(String name):本方法获得原始的字符串的component的内容,即获得rawProps中相应的值。
32,Object getRawNoReplacement(String name):与Object getRaw(String name)一样。
33,PropertyType getType(String propName):本法通过registeredProperties获得特征propName的属性类型。
34,ConfigurationManager getPropertyManager():本方法获得propertysheet的所有的ConfigurationManager。
35,Logger getLogger():本法是propertysheet及相对应的configurable的logger。
36,Collection<String> getRegisteredProperties():返回propertysheet的RegisteredProperties。
37,setCM(ConfigurationManager cm):设置propertysheet的ConfigurationManager。
38,boolean equals(Object obj):本方法通过把obj转换成propertysheet,比较两者的rawprops是否含有相同的keyset,即在xml是否定义了相同的属性。
39,PropertySheet clone():本方法把此propertysheet的registeredProperties,propValues,rawProps,cm,instanceName,的内容复制到新的propertysheet中,新的ps中的owner为null。
40,boolean validate():本法判断component的property-name的合法性。并且要在registeredProperties中存在。
41,static Map<Field, Annotation> parseClass(Class<? extends Configurable> configurable):本法通过对configurable的Class类对象进行操作,获得configurable的<Field, Annotation>对。所有的annotation是在运行时可见的。









注释翻译: 属性表,是单一组件的所有属性的一个集合(collection)。正如上所看到的,它实现了cloneable接口。Cloneable的中文意思是:可以复制的,克隆的。说明此类是一个可复制类。


位置 (bit position) 表示不同的修饰符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值