Progress-4GL中的Final / const关键字等价物

时间:2011-03-28 19:30:34

标签: final progress-4gl openedge

如果我在Java中有一个使用不可变成员的类,我会这样做:

class MyClass {
    private final String name;
    private final int id;
    myClass(String name, int id) {
        this.name = name;
        this.id = id;
    }
    String getName() { return name; }
    int getId() { return id; }
}

在Progress-4GL中,你通常会看到这样的东西:(请不要讲匈牙利表示法。我也讨厌它,但它在Progress社区很常见,所以这就是我生活中的东西。)< / p>

CLASS MyClass :

    DEFINE VARIABLE mcName as CHARACTER NO-UNDO.
    DEFINE VARIABLE miId   as INTEGER   NO-UNDO.

    CONSTRUCTOR PUBLIC MyClass(INPUT ipcName AS CHARACTER,
                               INPUT ipiId AS INTEGER):
        ASSIGN mcName = ipcName
               miId   = ipiID.
    END. /* constructor(char,int)*/
END CLASS. /* MyClass */

我被告知在进展10.2B中,他们增加了制作常数/最终变量的能力。但是,我无法在任何地方找到任何参考。在我的架构师(版本10.2A)中,我确实看到FINAL被视为关键字。但它背后的文件只是让我无法实现。

如果您曾尝试搜索进度文档,那么您就会知道我的困境。

如何在Progress 10.2B中执行不可变变量?我需要注意哪些问题吗?

谢谢!

编辑1 我在FINAL找到了文档。它似乎只适用于类和方法。我目前的做法是

CLASS ImmutableString :
    DEFINE PRIVATE VARIABLE mcValue AS CHARACTER NO-UNDO.

    CONSTRUCTOR PUBLIC ImmutableString(INPUT ipcValue AS CHARACTER) :
        ASSIGN mcValue = ipcValue.
    END.

    METHOD PUBLIC CHARACTER getValue() :
        RETURN mcValue. /* Is a defensive copy required? */
    END METHOD.
END CLASS.

1 个答案:

答案 0 :(得分:3)

您还可以使用公共“GET”和私有“SET”创建公共属性:

   DEF PUBLIC PROPERTY Value AS CHAR NO-UNDO
      GET.
      PRIVATE SET.

   CONSTRUCTOR PUBLIC ImmutableString(INPUT ipcValue AS CHARACTER) :
       Value = ipcValue.
   END.

这是一个更少的代码并做同样的事情。

EDITED更改属性名称以匹配原始海报的示例。