本公众号之前介绍《Clean ABAP》这本书的时候曾经提到,书中作者的观点是,在类的实例方法和静态方法(Static)之间,优先选择前者,理由如下:
- 静态方法并不是真正的面向对象——它们不参与类继承层次结构,更不支持在运行时根据对象的实际类型进行动态调用,故而被冠名静态。静态方法依附于类本身,而不是某个具体的类实例。
- 静态方法将类的行为限定于某一个特定的实现,远不如实例方法灵活。实例方法可以被重定义,在单元测试中也可以更容易地被 mock.
总之,实例方法更有利于书写 Clean ABAP Code,我们开发时应该把实例方法作为默认的选择。
当然静态方法也有其应用场合,就是 Static Creation 和 Utility Method.
Static Creation 可以看做一种特殊的构造函数,返回一个指定业务场景的对象实例。比如 SAP BOPF 框架里常用的 create_as_copy 方法,和设计模式里最常见的单例模式的 get_instance 方法,都是典型的 Static Creation 的例子。
Utility(工具) Method 内执行的逻辑不依赖于任何底层资源,并且这些逻辑通常不会预期发生变化,并且不需要任何参数化行为。比如书中举的把温度值从华氏度转换成摄氏度的方法,就是一个典型的工具方法,可以用静态方法来实现。
同类的静态方法一样,类的静态成员属性,也从属于类本身,而不是具体的类实例。
正因为类的静态成员属性依附于类的这种特性,我们在 ABAP 调试器里查看类的静态属性要稍稍麻烦一些,比如图2,我们想查看类 ZCL_STATIC_TEST 的某个静态成员属性的内容,则需要使用 "类名=>静态成员变量名"的命名规范,如图 2 绿色高亮区域所示。如果调试的时候,要查看的静态成员属性比较多,那么一个个手敲比较麻烦。
企图在上图的 ABAP 调试器 Variable 列,输入类的名称,然后双击查看这个类的明细,这是行不通的。显然,Variable 这一列只能输入 ABAP 变量的名称,输入类的名称无效。
此时我们可以在 Variable 列输入{C:类的名称}, 回车。对于本例而言,输入 {C:ZCL_STATIC_TEST} 然后回车,此时发现 Variable 列里显示 CLASS,如图 3 黄色区域所示。
双击,就能在新的窗口里,查看这个类的所有属性,包括静态成员属性的内容。这下节省了很多次敲击键盘的时间。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。