Javaで書いたプログラムをPython(Jython)から利用する

はじめに

Pythonで書くつもりだった研究のプログラムを後々Androidへの移植のため、Javaで書いてほしいと頼まれた。でも分析対象のデータがCSVファイルだったりJavaだとちょっと面倒くさそうなところがあったりするので、Javaで書いたプログラムをJythonを使って利用してみる。

Javaのパッケージ作成

試しに作ってみた.

$ tree
.
├── models
│   ├── CalcStats.class
│   └── CalcStats.java
└── Main.java
$ cat CalcStats.java
package models;
/**
 * @author Mejiro
 * @version 1.0
 */

public class CalcStats{
    /**
     * Calc average value.
     */

    public double calcAverage(double... args){
        /**
         * Calc average value.
         * @return average value
         */
        double sum = 0;
        for(int i=0; i<args.length; i++){
            sum += args[i];
        }
        return sum/(double)args.length;
    }
}

普通にjavaから使うなら↓みたいな感じ。

$ cat Main.java
import models.*;

public class Main{
        public static void main(String[] args){
                CalcStats calcStats = new CalcStats();
                double test[] = {64, 82, 99, 78, 77, 78, 65, 85};
                System.out.println(calcStats.calcAverage(test));
        }
}

Jythonから使ってみる

インストールはHomeBrewで.

$ brew install jython
$ jython
>>> import models
>>> calcstats = CalcStats()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'CalcStats' is not defined
>>> dir()
['__doc__', '__name__', 'models']
>>> calcstats = models.CalcStats()
>>> dir()
['__doc__', '__name__', 'calcstats', 'models']
>>> calcstats.calcAverage([78,87,68,89,98,78,67])
80.71428571428571
>>> exit()

使えた!Jythonについて色々調べないと使えないかと思ったけど、特に問題なくすんなり使えた.