apohllo.pl
więcej niż strona domowa...
 

Java w Rubim

Choć w internecie pojawia się wiele przykładów na to jak wykorzystać Javę w Rubim korzystając z JRubiego, nie omieszkam pokrótce omówić tego zagadnienia.

Najprościej można przetestować ten scenariusz uruchamiając konsolę JRubiego - jirb i wydając polecenie require 'java':

 $ jirb
 >> require 'java'
 #=> true

Dzięki temu prostemu poleceniu mamy dostęp do wszystkich pakietów, które znajdują się w dystrybucji Javy zainstalowanej na naszym komputerze (dalej będę pomijał znak zachęty jirb oraz początkowe wywołanie require):

s = java.lang.String.new("abc")
#=> #<Java::JavaLang::String:0xadf5be @java_object=abc>
s.length
#=> 3
s.codePointAt(1)
#=> 98

Co więcej – aby zachować zgodność z konwencjami Rubiego, wszystkie metody Javy zapisane w CamelCase są również dostępne w wersji z podkreśleniami. Ponadto, ponieważ piszemy w Rubim, nawiasy są opcjonalne:

s = java.lang.String.new("abc")
#=> #<Java::JavaLang::String:0xadf5be @java_object=abc>
s.code_point_at 1 
#=> 98

Jeśli chcemy korzystać z jakiejś klasy Javy bez podawania każdorazowo jej pełnej nazwy, możemy zaimportować odpowiedni pakiet za pomocą dyrektywy import:

import java.util.Date
d = Date.new 1111111111111
#=> #<Java::JavaUtil::Date:0x1873eb2 @java_object=Fri Mar 18 02:58:31 CET 2005>
d.year
#=> 105
d.month
#=> 2
d.day
#=> 5

Widzimy zatem, że korzystanie z Javy w Rubim, przy pomocy JRubiego jest bardzo proste. Co jednak mamy zrobić, jeśli chcemy skorzystać z jakiejś zewnętrznej biblioteki napisanej w Javie? Odpowiedź jest prosta – wystarczy, że ścieżka do niej znajdzię się w zmiennej środowiskowej CLASSPATH:

 $ export CLASSPATH=xstream-1.3.jar
 $ jirb
 >> require 'java'
 #=> true
 >> import com.thoughtworks.xstream.XStream
 #=> Java::ComThoughtworksXstream::XStream
 >> XStream.new
 #=> #<Java::ComThoughtworksXstream::XStream:0x1a3e41f @java_object=com.thoughtworks.xstream.XStream@1d03a4e>

Czy można chcieć więcej?

java | jruby | ruby | Opublikowano 11:14 07-04-2008. Ostatnia modyfikacja 03:24 08-04-2008 |
comments powered by Disqus