オブジェクト・フィールドは、次の状態のときに使用できます。
- 自由形式の評価
- EVAL 命令を使用して、ある Object 項目 (フィールドまたはプロトタイプされたプロシージャー)
を、タイプ Object のフィールドに割り当てることができます。
- 自由形式の比較
- あるオブジェクトを他のオブジェクトと比較することができます。
どんな比較でも指定することができますが、意味を持つのは次の比較のみです。
- 他のオブジェクトと等しいか等しくないか。2 つのオブジェクトが等しいのは、それらが正確に同一のオブジェクトを表現している場合です。
同じ値を持つ 2 つの異なるオブジェクトは、等しくありません。
2 つのオブジェクトの値が等しいかどうかをテストしたい場合は、次のように Java™
'equals' メソッドを使用します。
D objectEquals PR N EXTPROC(*JAVA
D : 'java.lang.Object'
D : 'equals')
C IF objectEquals (obj1 : obj2)
C ...
C ENDIF
- *NULL と等しいか等しくないか。
オブジェクトは、そのクラスの特定のインスタンスに関連付けられていない場合に、*NULL に等しくなります。
- 自由形式の呼び出しパラメーター
- プロトタイプの中のパラメーターがオブジェクトである場合は、オブジェクトを
CALL 命令のパラメーターとしてコーディングできます。
注: - オブジェクトは、入力フィールドまたは出力フィールドとしては無効です。
- 妥当性検査の割り当てはチェックされません。たとえば RPG
では、クラス「数」のオブジェクトをクラス「ストリング」で定義されているオブジェクト変数に割り当てることができます。これが正しくなかった場合は、Java
エラーはユーザーが「ストリング」変数を使用しようとした時点で発生します。
図 1. オブジェクト・データ・タイプの例D Obj S O CLASS(*JAVA
D :'java.lang.Object')
D Str S O CLASS(*JAVA
D :'java.lang.String')
D Num S O CLASS(*JAVA
D :'java.math.BigDecimal')
* Since all Java classes are subclasses of class 'java.lang.Object',
* any object can be assigned to a variable of this class.
* The following two assignments are valid.
C EVAL Obj = Str
C EVAL Obj = Num
* However, it would probably not be valid to assign Str to Num.