OGNL学习笔记-属性(Referring to Properties)

本文主要介绍了OGNL处理不同对象属性的方式,如Map、Lists、Array、String及普通对象的属性访问。还阐述了OGNL与Java代码中属性的下标访问,OGNL可通过任意对象做index访问属性。此外,提到Collections中有很多特殊的伪属性可通过OGNL访问。

属性(Referring to Properties

 

 

一、OGNL处理不同对象的属性是不一样的。

1.   Map的属性就是key

2.   ListsArray的属性就是下标index

3.   String的属性也是下标

4.   普通对象只能处理string属性,这个属性具有set/getis/set方法。

属性名可以是任何类型,而不仅仅是“字符串类型的名字”(注意区别属性名和属性值的类型,这里是说这个属性的名字可以是非字符串的,例如这个属性的名字可以是一个数字),对于非字符串类型的属性名,我们访问属性值的时候要用下标的形式。例如对一个数组array

它的长度是array的一个属性,这个属性名字叫做length,这个名字是一个字符串,因此可以用下面的方式访问:

array.length

现在要访问第0个元素,那么这个属性名是0,它是数字,应该按下下标方式访问

array[0]

为什么要将下标也作为属性呢?暂时做为一个未解决的问题!

OGNL内部是将

array.length

做为

array[“length”]

形式的,同时也等价于

    array[“len”+”gth”]

 

 

二、OGNLjava代码中属性的下标访问

java代码中,按index访问属性的模型如下:

    public PropertyType[] getPropertyName()

public void setPropertyName(PropertyType[] anArray)

public PropertyType getPropertyName(int index)

public void setPropertyName(int index, PropertyType value)

OGNL中可以通过index来无缝地访问,用下面的方式:

someProperty[2]

这样将自动调用getSomeProperty(2)或者是setSomeProperty(2,value)

OGNLindex方式访问属性做了扩展,它不仅仅可以用整数下标,也可以使用任意的对象做indexOGNL将匹配java对象中下列形式的方法:

public PropertyType getPropertyName(IndexType index)

public void setPropertyName(IndexType index, PropertyType value)

PropertyType IndexType必须在相应的setget方法中匹配。在webwork中的Session对象就有:

    public Object getAttribute(String name)

public void setAttribute(String name, Object value)

来设置任意类型的属性值。使用OGNL表达式来访问就是:

    session.attribute[“foo”]

 

 

三、Collections伪属性(Pseudo-Properties

Collections中有很多特殊的属性可以通过OGNL来访问,Collections并不遵循javabeans的命名规则,像size()length()等等。罗列如下

Collection

Special Properties

Collection (inherited by Map, List & Set)

size

The size of the collection

isEmpty

Evaluates to true if the collection is empty

List

iterator

Evalutes to an Iterator over the List.

Map

keys

Evalutes to a Set of all keys in the Map.

values

Evaluates to a Collection of all values in the Map.

Note

These properties, plus size and isEmpty, are different than the indexed form of access for Maps (i.e. someMap["size"] gets the "size" key from the map, whereas someMap.size gets the size of the Map.

Set

iterator

Evalutes to an Iterator over the Set.

Iterator

next

Evalutes to the next object from the Iterator.

hasNext

Evaluates to true if there is a next object available from the Iterator.

Enumeration

next

Evalutes to the next object from the Enumeration.

hasNext

Evaluates to true if there is a next object available from the Enumeration.

nextElement

Synonym for next.

hasMoreElements

Synonym for hasNext.

 

 

内容概要:本文研究了一种基于改进ICEEMDAN的火电-蓄电池-飞轮混合储能联合调频协同控制策略,旨在提升电力系统频率调节的快速响应能力与运行稳定性。通过引入改进的自适应噪声完备集合经验模态分解(ICEEMDAN)方法,对电网频率偏差信号进行多时间尺度分解,精确分离高频与低频动态分量,并据此实现功率的差异化分配:高频成分由响应迅速的飞轮储能承担,低频成分由能量密度高的蓄电池处理,同时结合火电机组的基础调频能力,构建火电-混合储能多源协同控制架构。该策略充分发挥各类储能技术的优势,有效缓解单一储能系统的压力,延长设备寿命,并提升系统整体调频性能。文中提供了完整的Matlab仿真代码实现,验证了该方法在抑制频率波动、优化储能出力、提高系统可靠性和经济性方面的显著效果。; 适合人群:具备电力系统分析、自动控制理论及新能源技术等相关专业知识背景,熟悉Matlab/Simulink仿真平台,从事电力系统调频控制、混合储能系统优化、多时间尺度能量管理等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入研究混合储能系统在电网一次调频与二次调频中的功率分配机制与协调控制逻辑;②掌握ICEEMDAN信号分解技术在能源系统动态特征提取与多尺度控制中的应用方法;③实现火电机组与多类型储能协同参与调频的仿真建模、算法开发与性能对比分析;④为综合能源系统、微电网及新型电力系统的多源多时间尺度协调控制提供理论依据与技术参考。; 阅读建议:建议结合提供的Matlab代码逐模块分析算法实现流程,重点理解信号分解、模态分量判别、功率分配规则及控制器设计等关键环节,可通过调整系统参数、模拟不同扰动工况进行仿真测试,进一步开展灵敏度分析与策略优化,以深化对协同控制机理的认识并拓展其实际应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值