Velocityのメソッドの引数でのオートボクシングについて

otaguro 60views 更新:2015年5月21日

javaではオートボクシングによって、引数がlongのメソッドをint型の変数を引数で渡して呼び出すことが出来ますが、Velocityでも同じようにオートボクシングが使えるようです。また、オートボクシングではlong型からint型に直すことは出来ませんが(表現できる値の範囲がlong型の方がint型よりも広いため)、Velocityでもそれは同様ですので注意が必要です。

下記は検証用のコード

テンプレート:

getInt:${result.getInt()}
getLong:${result.getLong()}
isInt(getInt):  ${result.isInt(${result.getInt()})}
isInt(getLong): ${result.isInt(${result.getLong()})}
isInt(getLongintValue): ${result.isInt(${result.getLong().intValue()})}
isLong(getInt): ${result.isLong(${result.getInt()})}
isLong(getLong):${result.isLong(${result.getLong()})}

resultにはnew Data(3)を設定:

context.put("result", new Data(3));

Dataクラス:

public class Data{
    private int note;
    public Data(int string) {
      note=string;
    }

 public int getInt(){
  return note;
 }
 public long getLong(){
     return (long)note;
 }
 public int isInt(int a){
     return a;
 }
 public long isLong(long a){
    return a;
 }

出力結果:

getInt:3
getLong:3
isInt(getInt):  3
isInt(getLong): ${result.isInt(${result.getLong()})}
isInt(getLongintValue): 3
isLong(getInt): 3
isLong(getLong):3

引数がint型のメソッドを、long型の変数を入れて呼び出すことは出来ないことが確認できました。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません