Statistical Programming

ScalaからJavaのライブラリをつかう

scalaからjavaの外部ライブラリを適当に使えないものかと思い、

以前ふれたvelocityを試してみます。

 

package test

import java.io._;

import org.apache.velocity._;

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.exception.MethodInvocationException;

import org.apache.velocity.exception.ParseErrorException;

import org.apache.velocity.exception.ResourceNotFoundException;

 

object ImportTest extends App {

   def velo()={

 

      Velocity.init()

      var context = new VelocityContext();

      var visitor=new Visitor("Tanaka")

      context.put("visitor",visitor)

      var sw=new StringWriter()

      var template=Velocity.getTemplate("order.vm","UTF-8")

      template.merge(context, sw)

      println(sw.toString())

      sw.flush()

      

    }

   velo()

}

class Visitor(name:String){

def getname()={

  name

}

      }

 

 

次に、雛形となるファイルを作成。order.vmと名付けます。

 

 

 

$visitor.name 

 

ご来店ありがとうございます。

 

 

これでおっけー。実行すると…

 

 

Tanaka 

 

ご来店ありがとうございます。

 

 

このようにうまくいきました。

ちょっと戸惑ったのがscalaとjavaコンストラクタの違いです。

自作のコンストラクタを一つだけ持つ場合、わざわざクラスに書く必要がなくクラスの引数として指定してあげればそれでおっけーということです。

 

まあなんにせよjavaのライブラリを使えるというのはかなり助かります。