LoginSignup
1
0

More than 5 years have passed since last update.

JRubyからJavaを呼び出す

Last updated at Posted at 2017-11-01

経緯

やり方

(前提)JRubyを使える・javaをコンパイルできる
1. Javaのコードを書く(ファイル名をJavaCallTest.javaとします)
2. JavaCallTest.javaをコンパイルしてJavaCallTest.classを用意
3. JRuby内でrequire 'java'; java_import 'JavaCallTest'
4. 適当に呼び出す

以下、具体例。

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だったので大変でした

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0