头图

本公众号之前介绍《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 黄色区域所示。

双击,就能在新的窗口里,查看这个类的所有属性,包括静态成员属性的内容。这下节省了很多次敲击键盘的时间。


注销
1k 声望1.6k 粉丝

invalid


引用和评论

0 条评论