##経緯
##やり方
(前提)JRubyを使える・javaをコンパイルできる
- Javaのコードを書く(ファイル名を
JavaCallTest.java
とします) -
JavaCallTest.java
をコンパイルしてJavaCallTest.class
を用意 - JRuby内で
require 'java'; java_import 'JavaCallTest'
- 適当に呼び出す
以下、具体例。
##Javaのコード
JavaCallTest.java
public class JavaCallTest{
public static String str1(){
return "str1";
}
public String str2() {
return "str2";
}
}
##JRubyのコード
java_call_test.rb
require 'java'
java_import 'JavaCallTest'
p JavaCallTest.str1
begin
jct1 = JavaCallTest.new
jct1.str1
rescue => e
puts e.class
puts e.message
puts e.backtrace
end
jct2 = JavaCallTest.new
p jct2.str2
begin
p JavaCallTest.str2
rescue => e
puts e.class
puts e.message
puts e.backtrace
end
##結果
$ jruby CallJava1.rb
"str1"
NoMethodError
undefined method `str1' for #<Java::Default::JavaCallTest:0x553a3d88>
Did you mean? str2
CallJava1.rb:7:in `<main>'
"str2"
NoMethodError
undefined method `str2' for Java::Default::JavaCallTest:Class
Did you mean? str1
org/jruby/RubyBasicObject.java:1657:in `method_missing'
CallJava1.rb:17:in `<main>'
##コメント
呼び方が以下のように対応するらしい
- JavaのstaticソッドがRubyのクラスメソッド
- Javaの非staticソッドがRubyのインスタンスメソッド
Javaの知識が0だったので大変でした