cor*_*iKa 0 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; }
}
Run Code Online (Sandbox Code Playgroud)
在 Progress-4GL 中,您通常会看到这样的内容:(请不要讲匈牙利符号。我也讨厌它,但它在 Progress 社区中很常见,所以我只接受它。)
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 */
Run Code Online (Sandbox Code Playgroud)
有人告诉我,在 Progress 10.2B 中,他们增加了制作常量/最终变量的能力。但是,我无法在任何地方找到对它的任何引用。在我的 Architect(版本 10.2A)中,我确实看到它FINAL被认为是一个关键字。但它背后的文档让我望而却步。
如果您曾经尝试过搜索 Progress 文档,您就会明白我的困境。
如何在 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.
Run Code Online (Sandbox Code Playgroud)
您还可以使用公共“GET”和私有“SET”创建公共属性:
DEF PUBLIC PROPERTY Value AS CHAR NO-UNDO
GET.
PRIVATE SET.
CONSTRUCTOR PUBLIC ImmutableString(INPUT ipcValue AS CHARACTER) :
Value = ipcValue.
END.
Run Code Online (Sandbox Code Playgroud)
那是更少的代码并且做同样的事情。
编辑以更改属性名称以匹配原始海报的示例。