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について色々調べないと使えないかと思ったけど、特に問題なくすんなり使えた.