Java メソッドの呼び出し

制約事項: 次の説明はネイティブ コードのみに該当します。

Java オブジェクト内のメソッドは、いずれもメソッドと同じ名前のメッセージを送信することによって呼び出されます。また、COBOL プログラムのクラス制御段落で宣言したクラス名にメッセージを送信して、Java クラスの静的メソッドを呼び出すこともできます。Java ではメソッド名の大文字、小文字が区別されるため、COBOL プログラム内に記述するメッセージ名は、Java の対応するメソッドと大文字、小文字の区別まで一致させる必要があります。

Java にはメソッドのオーバーロード機能があり、渡されるパラメーターの数と型に応じて、同じ名前のメソッドの実装を変えることができます。この機能に必要な COBOL 側の処理は内部的に実行されるため、常に適切な Java メソッドが呼び出されます。

たとえば Rectangle クラスには、互いに異なるパラメーターを受け取る 3 種類の add() メソッドがあります。次の Java コードは、Rectangle の add() メソッドを呼び出す 3 通りの方法を示しています。

 Rectangle r1 = new Rectangle(0,0,0,0) ;
 Point pt = new Point(6,6) ; 
 Rectangle r2 = new Rectangle(3,4,9,9) ;  
 r1.add(4,5) ; // changes r1 to smallest rectangle 
               //  containing r1 and point 4,5
 r1.add(pt) ;  // changes r1 to smallest rectangle 
               //  containing r1 and Point pt. 
 r1.add(r2) ;  // changes r1 to union of r1 & r2 

これに相当する COBOL のコードは次のようになります。

 repository.
     class jRectangle as"$java$java.awt.Rectangle"
     class jPoint as "$java$java.awt.Point"
     .
 working-storage section. 
 01 r1                 object reference. 
 01 r2                 object reference. 
 01 pt                 object reference. 

 procedure division. 
     invoke jRectangle "new" returning r1
     invoke jPoint "new" using 4 5 returning pt
     invoke jRectangle "new" using 3 4 9 9 returning r2
     invoke r1 "add" using 4 5  
     invoke r1 "add" using pt 
     invoke r1 "add" using r2 

r2 と pt はどちらもオブジェクト参照型のデータ項目ですが、COBOL ランタイム システムは Java オブジェクトの型を判断して適切な Java メソッドを呼び出します。