EGL プリミティブ型の Java へのマッピング

EGL は、プリミティブ・データ型の変換を、EGL および Java™ 間で行います。 可能な変換について説明するには、5 つの異なるテーブルが必要です。

これらのテーブルに、基礎となるテクノロジーの制限が公開されています。 例えば、ExternalType 関数を呼び出すと、EGL TIMESTAMP は java.lang.Timestamp クラスに変換します。このクラスは JSF では使用できません。このため、EGL TIMESTAMP は JSF ハンドラーで java.util.Calendar に変換します。

以下のテーブルでは、EGL プリミティブによっては、クラス (java.math.BigDecimal など) に変換されるものもあれば、Java プリミティブ (long など) に変換されるものもあります。

ExternalType 関数

次の表は、ExternalType 関数呼び出しでの EGL プリミティブ型の Java データ型への変換のしかたを示しています。 これは、単なるマッピングです。 ここでの EGL から Java への変換は、Java から EGL への単純なミラー・イメージではありません。 疑問符 (?) は、NULL 可能型であることを示しています。 詳しくは『NULL 値および NULL 可能型』を参照してください。

表 1. EGL から Java への変換
EGL 型 Java の型
CHAR、CHAR?、MBCHAR、 MBCHAR?、DBCHAR、DBCHAR?、 UNICODE、UNICODE? java.lang.String (変換時の末尾ブランク除去/埋め込みおよび切り捨て)
UNICODE(1) char
UNICODE(1)? java.lang.Character
STRING java.lang.String
HEX(2) byte
HEX(2)? java.lang.Byte
HEX(>2)、HEX(>2)? byte[]
BOOLEAN boolean
BOOLEAN? java.lang.Boolean
SMALLINT short
SMALLINT? java.lang.Short
INT int
INT? java.lang.Integer
BIGINT long
BIGINT? java.lang.Long
DECIMAL、BIN、MONEY、NUM (小数点以下なし)

1<=length<=9、int
10<=length<=18、long
19<=length<=32、java.math.BigInteger

DECIMAL?、BIN?、MONEY?、 NUM? (小数点以下なし)

1<=length<=9、java.lang.Integer
10<=length<=18、java.lang.Long
19<=length<=32、java.math.BigInteger

DECIMAL、DECIMAL?、BIN、 BIN?、MONEY、MONEY?、 NUM、NUM? (小数点以下の数値により宣言) java.math.BigDecimal
SMALLFLOAT float
SMALLFLOAT? java.lang.Float
FLOAT double
FLOAT? java.lang.Double
DATE、DATE? java.sql.Date
TIME、TIME? java.sql.Time
TIMESTAMP、TIMESTAMP? java.sql.Timestamp
INTERVAL、INTERVAL? (マイクロ秒) java.math.BigInteger (マイクロ秒)
INTERVAL、INTERVAL? (月) long (月)
BLOB 該当なし
CLOB 該当なし
動的配列 java.util.List。動的配列の要素は、このテーブルに従って Java タイプに変換されます。つまり、EGL の DATE の配列は、要素が java.sql.Date オブジェクトである java.util.List に変換されます。
構造化レコード byte[n]。ここで n は、レコード内のバイト数です。

次の表は、ExternalType 関数呼び出しで、Java データ型が EGL プリミティブ型に変換される方法を示しています。最初の列のアスタリスクは、変換が EGL から Java への変換のミラーであることを示しています。

表 2. Java から EGL への変換
Java の型 EGL 型
char* UNICODE(1)
java.lang.Character* UNICODE(1)?
java.lang.String* STRING
byte* HEX(2)
byte[n] HEX(n*2)?
byte[n]* 構造化レコード。ここで n は、レコード内のバイトの数です。
java.lang.Byte* HEX(2)?
boolean* BOOLEAN
java.lang.Boolean* BOOLEAN?
short* SMALLINT
java.lang.Short* SMALLINT?
int* INT
java.lang.Integer* INT?
long* BIGINT
java.lang.Long* BIGINT?
java.math.BigDecimal DECIMAL(32,scale)。 java.math.BigDecimal の桁数には制限はありません。 EGL は Java 生成では 32 までに制限されています。
java.math.BigInteger NUM(32)。 java.math.BigInteger の桁数には制限はありません。 EGL は Java 生成では 32 までに制限されています。
float* SMALLFLOAT
java.lang.Float* SMALLFLOAT?
double* FLOAT
java.lang.Double* FLOAT?
java.sql.Date DATE?
java.sql.Time TIME?
java.sql.Timestamp TIMESTAMP("yyyyMMddHHmmssfff")?
java.util.List* DynamicArray。List は、タイプが List の要素タイプにより確定する EGL 動的配列に変換されます。 例えば、List に java.lang.Double オブジェクトが含まれる場合、EGL 動的配列は FLOAT?[] タイプです。

報告関数

XML レポート設計文書では、データ型は Java データ型として記述されます。 設計資料から EGL JasperReport ハンドラー関数を呼び出す場合、 その呼び出しは、適用可能な EGL プリミティブ型に対応する Java データ型を使用する必要があります。 また、JasperReport ハンドラー関数が XML 設計ファイルに戻すデータについて、Java データ型で宣言することも必要です。

以下の表は、XML レポート設計の資料および対応する EGL プリミティブ型で使用される Java データ型を示します。

表 3. 報告用 EGL から Java への変換
EGL プリミティブ型 Java データ型
BIGINT java.lang.Long
BIN java.math.BigDecimal
BLOB 該当なし
BOOLEAN java.lang.Boolean
CHAR java.lang.String
CLOB 該当なし
DATE java.util.Date
DBCHAR java.lang.String
DECIMAL java.math.BigDecimal
FLOAT java.lang.Double
HEX java.lang.Byte
INT java.lang.Integer
INTERVAL java.lang.String
MBCHAR java.lang.String
MONEY java.math.BigDecimal
NUM java.math.BigDecimal
NUMC java.math.BigDecimal
PACF java.math.BigDecimal
SMALLFLOAT java.lang.Float
SMALLINT java.lang.Short
STRING java.lang.String
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
UNICODE java.lang.String

JavaLib 関数

引数を JavaLib EGL システム・ライブラリーから関数に引き渡す場合、 以下の表で示されているように、EGL はその引数を Java 型に引き渡します。 戻り値は、右の列の型から左の列の対応する方に変換されます。

表 4. 引数の JavaLib 関数への引き渡し
EGL 型 Java の型
ストリング・リテラル、または CHAR 型、DBCHAR 型、MBCHAR 型、UNICODE 型の変数 キャストなし
"myString"
java.lang.String
ID を示す objID:java をキャスト
"myId" as 
   "objID:java"

x = "myId";
x as "objID:java"
ID が参照するオブジェクトのクラス
NULL からキャスト。これは、完全修飾クラスに null 参照を提供するのに適しています
NULL as "java:
java.lang.Thread"

x = "java.util.
HashMap";
NULL as x
指定したクラス
注: 'null as "java:int[]" ' のような、NULL でキャストされた配列に渡すことはできません
java:char でキャスト。これは、値の先頭の文字が渡されることを意味します (次の列の例ではそれぞれ "a" が渡されます)
"abc" as "java:char"

x = "abc";
x as "java:char"
char
STRING 変数 キャストなし myStringVar java.lang.String
FLOAT 変数 キャストなし
myFloatValue
double
HEX 変数 キャストなし
myHexValue
バイト配列
SMALLFLOAT 変数 キャストなし
mySmallFloat
float
DATE 変数 キャストなし
myDate
java.sql.Date
TIME 変数 キャストなし
myTime
java.sql.Time
TIMESTAMP 変数 キャストなし
myTimeStamp
java.sql.Timestamp
INTERVAL 変数 キャストなし
myInterval
java.lang.String
BOOLEAN 変数 キャストなし
myBoolean
boolean
浮動小数点数リテラル キャストなし -6.5231E96 double
小数部を含まない数値変数 (または非浮動小数点数リテラル)。 先行ゼロは、リテラルの桁数に含まれます。 キャストなし、1 - 4 桁
0100
short
キャストなし、5 から 9 桁
00100
int
キャストなし、9 から 18 桁
1234567890
long
キャストなし、18 桁より大
1234567890123456789
java.math.BigInteger
小数部を含む数値変数 (または非浮動小数点数リテラル)。先行ゼロおよび後続ゼロは、リテラルの桁数に含まれます。 キャストなし、1 から 6 桁
3.14159
float
キャストなし、7 から 18 桁
3.14159265
double
キャストなし、18 桁より大
56789543.222
java.math.BigDecimal
小数部付き、または小数部なしの数値変数または非浮動小数点数リテラル

以下として
キャスト
java:java.math.-
BigDecimal、
BigInteger、
java:byte、
java:double、
java:float、
java:short、
java:int、
java:long

x = 42;

x as "java:byte"

x as "java:long"
指定した型。ただし、その型で設定される範囲外の値の場合、精度が失われ、符号が変わることがあります。
java:boolean によるキャスト。これは、ゼロ以外が true、ゼロが false であることを意味します。
x = 1;
x as "java:boolean"
boolean

JSF ハンドラー関数

次の表は、JSF ハンドラーから Java 関数への引数の引き渡しが行われるときに EGL が実行する EGL から Java への変換を示します。関数の戻り値は、Java 型から EGL 型に変換されます。EGL NULL 引数を関数に引き渡す場合、 Java NULL 値が戻ります。

表 5. JSF ハンドラー用変換
EGL 型 Java の型
BIGINT / BIN(18) java.lang.Long
BIN (小数部付き) java.math.BigDecimal
BLOB byte[]
BOOLEAN* java.lang.Boolean
CHAR java.lang.String
CLOB java.lang.String
DATE java.util.Date
DBCHAR java.lang.String
DECIMAL java.math.BigDecimal
FLOAT java.lang.Double
HEX byte[]
INT / BIN(9) java.lang.Integer
INTERVAL java.lang.String
MBCHAR java.lang.String
MONEY java.math.BigDecimal
NUM java.math.BigDecimal
NUMC java.math.BigDecimal
PACF java.math.BigDecimal
SMALLFLOAT java.lang.Float
SMALLINT / BIN(4) java.lang.Short
STRING java.lang.String
TIME java.util.Date
TIMESTAMP java.util.Calendar
UNICODE java.lang.String
レコード JavaBeans 仕様に準拠するオブジェクト (レコードのフィールドの値を取得するメソッドを持つオブジェクト)
*ここで、以下のプリミティブ型のいずれかに基づく変数は、IsBoolean プロパティーが YES に設定されています。
  • CHAR
  • BIN
  • NUM
  • NUMC
  • DECIMAL
  • PACF
  • INT
  • BIGINT
  • SMALLINT
  • FLOAT
  • MONEY

この場合、変数は実際の BOOLEAN のように扱われ、java.lang.Boolean にマッピングされます。


フィードバック