2009-10-19 12 views
7

Por lo que entiendo JRuby, es perfectamente posible utilizar la clase Java dentro del código JRuby y viceversa, sin embargo, todavía no entiendo algunas cosas.Limitaciones de JRuby cuando se trabaja con clases Java

  • ¿Puede JRuby funcionar con las anotaciones de Java?
  • ¿es posible utilizar la reflexión de JRuby en la clase Java?
  • ¿es posible utilizar la reflexión de Java en la clase JRuby?
  • tengo clases ejecutables en JRuby?
  • ¿es posible redefinir la clase Java dentro del script JRuby? (de la misma manera que puedo redefinir, por ejemplo, Integer en C Ruby)
  • ¿Existen otras limitaciones que impidan usar JRuby como parte de cualquier aplicación Java?

Respuesta

9
  • ¿Puede JRuby trabajar con Java Annotations?

No. Ruby no tiene anotaciones. Sin embargo, el compilador ruby2java le permitirá agregar anotaciones que se usan al compilar en un archivo de clase.

  • ¿es posible utilizar la reflexión de JRuby en la clase de Java?

Sí:

java.util.Vector.methods.include? '[]' # => true 
  • es posible utilizar la reflexión de Java en la clase JRuby?

¿Cuándo se incrusta JRuby usando BSF o JSR223? Solo en la medida en que esas tecnologías lo permitan. Cuando se usa ruby2java? Sí. Genera archivos Java normales .class.

  • tengo clases ejecutables en JRuby?

No estoy exactamente seguro de lo que estás preguntando.

  • ¿es posible redefinir la clase Java dentro del script JRuby? (Del mismo modo que lo puede volver a definir por ejemplo entero en C Ruby.)

Sí, se puede parche mono en JRuby, pero los cambios no son visibles desde el lado de Java, simplemente JRuby:

import java.util.Vector 
class Vector 
    def foo 
    "foo!" 
    end 
end 
v = java.util.Vector.new 
v.foo      # => "foo!" 
  • ¿Existen otras limitaciones que impidan utilizar JRuby como parte de cualquier aplicación Java?

Un montón de little gotchas abundan cuando se utiliza Java de JRuby. ruby2java todavía está en su infancia, y aún no estoy seguro de que esté listo para un entorno de producción. Aparte de eso, la atención se centró más en las secuencias de comandos con BSF y JSR223, que pueden o no adaptarse a sus propósitos.

+0

clases ejecutables significa que la definición de clase es el código ejecutable, por ejemplo. http://yehudakatz.com/2009/06/04/the-importance-of-executable-class-bodies/ o http://split-s.blogspot.com/2005/12/rubys-executable-class-definitions .html –

+0

En ese caso, sí, las clases de JRuby son exactamente como las clases de Ruby. – Pesto

+1

Debe tenerse en cuenta que las Anotaciones son compatibles con la llamada 'java_annotación 'TheAnnotation'' –

3

JRuby 1.4 contiene algo de soporte para anotaciones en las clases de Ruby, pero solo en tiempo de ejecución. Consulte http://github.com/nicksieger/ruby-jersey para ver un ejemplo del uso de la nueva generación de clase de tiempo de ejecución para interoperar con los marcos basados ​​en anotaciones.

El resto de las respuestas de Pesto son más o menos bien.

1

JRuby no apoyar ahora a través de Anotaciones java_annotation pero tiene algunas limitaciones. Uno serio en mi experiencia hasta el momento es que requiere el uso de become_java! (que no está documentado). Esto le impide utilizar anotaciones en las clases de Ruby que fueron una subclase de superclases Java Debido a la edición 2359.

Esto es bastante problemático en programación web, donde muchos marcos de utilizar las anotaciones para su sistema de enrutamiento. Significa efectivamente que no puede crear clases principales para controladores.

Cuestiones relacionadas