# Javasupport Low-level API

## Class: Java

### class methods

    java_to_primitive(obj) -> ruby primitive or obj

If obj is a Java object and either a boolean, numeric type or string, a corresponding instance of a primitive (boolean, numeric or string) Ruby type is returned. Otherwise obj is returned.

    primitive_to_java(obj) -> aJavaObject

If obj is of a primitive Ruby type (boolean, numeric or string) a corresponding JavaObject is returned. Otherwise a JavaObject wrapping obj is returned.

## Class: Java::JavaClass

### class methods

    for_name( aString ) -> aJavaClass

A JavaClass corresponding to the named class is returned. If no matching Java class is available a NameError is raised.

Example:

    Java::JavaClass.for_name("java.util.Random")

### instance methods

    public? -> true or false

Returns true if the Java class is public.

    final? -> true or false

Returns true if the Java class is final.

    interface? -> true or false

Returns true if the Java class is an Interface.

    array? -> true or false

Returns true if the Java class represents a Java array.

    name -> aString

Returns the name of the Java class, i.e "package.name.ClassName".

    to_s -> aString

Synonym for Java::JavaClass#name.

    superclass -> aJavaClass

Returns a JavaClass corresponding to the Java super-class of the current JavaClass.

    jc <=> aJavaClass -> -1, 0, +1

Returns -1, 0, +1 depending on whether this class is a subclasss the same class, or neither, as aJavaClass.

    java_instance_methods -> anArray

Returns a list of Java::JavaMethod's for the instance methods available on this Java class.

    java_class_methods -> anArray

Returns a list of Java::JavaMethod instances for the class (or "static") methods available on this Java class.

    java_method( aString, [aString]* ) -> aJavaMethod

Returns a Java::JavaMethod for the method with the given name (first argument) and parameter types (remaining arguments).

Raises NameError if there isn't a matching method.

Example:

    string_class = Java::JavaClass.for_name("java.lang.String")
    string_class.method("valueOf", "int")

    constructors -> anArray

Returns a list of Java::JavaConstructor instances for the constructors on this Java class.

    constructor( [aString]* ) -> aJavaConstructor

Returns a Java::JavaConstructor with parameter types given. Raises NameError if there isn't a matching constructor.

    cls.array_class -> aJavaClass

Returns a Java::JavaClass representing arrays of this Java class.

Example:

    cls = Java::JavaClass.for_name("java.lang.String")
    cls.array?                      # -> false
    array_cls = cls.array_class
    array_cls.array?                # -> true
    array_cls.name                  # -> "[Ljava.lang.String;"

    cls.fields -> anArray

Returns a list of the public fields (Java::JavaField) on this Java class.

    cls.declared_fields -> anArray

Returns a list of all (public, private, protected) fields (Java::JavaField) on this Java class.

    cls.field( aString ) -> aJavaField

Returns a Java::JavaField for the named field.

Raises NameError if there is no field by that name.

    cls.interfaces -> anArray

Returns a list of the names of the interfaces implemented by this Java class.

    cls.primitive? -> true or false

Returns true if the Java class represents a primitive type ('int', 'boolean', etc...), false otherwise.

    cls.assignable_from?( aJavaClass ) -> true or false

Returns true if instances of the given Java class can be assigned to variables of this Java class.

Example:

    object_class.assignable_from?(string_class)  # -> true
    string_class.assignable_from?(object_class)  # -> false

    cls.component_type -> aJavaClass

If this Java class is an array class, then a JavaClass for the type of the elements is returned.

If this Java class isn't an array class, then a TypeError is raised.

## Class: Java::JavaMethod

### instance methods

    meth.name -> aString

Returns the name of the method.

Example:

    java_class.java_method("toString").name  # --> "toString"

    meth.arity -> aFixnum

Returns the number of arguments on this method.

    meth.public? -> true or false

Returns true if the Java method is public, false otherwise.

    meth.final? -> true or false

Returns true if the Java method is final, false otherwise.

    meth.invoke( aJavaObject, [anObject]* ) -> aJavaObject

Invokes the corresponding Java instance method on the Java object given as first arguments. The remaining arguments are passed as arguments in the invokation.

Example:

    meth.name    # -> "indexOf"
    meth.arity   # -> 1
    meth.invoke(java_string, another_java_string)
                 # -> an instance of java.lang.Integer

    meth.invoke_static( [anObject]* ) -> aJavaObject

Invokes the corresponding Java class ("static") method. All arguments are passed as arguments in the invokation.

Example:

    meth = string_class.java_method("valueOf", "int")
    meth.static?   # -> true
    meth.invoke_static(java_integer_five)
                   # -> the java.lang.String value "5"

    meth.argument_types -> anArray

Returns a list of the names of the Java argument types.

Example:

    meth.argument_types  # -> ["int", "java.lang.String"]

    meth.inspect -> aString

Returns a human-readable representation of this Java method.

    meth.static? -> true or false

Returns true if this method is a class ("static") method, false otherwise.

    meth.return_type -> aString

Returns the name of the Java return type for this method.

Example:

    meth = java_obj.java_method("toString")
    meth.return_type                        # -> "java.lang.String"

## Class: Java::JavaConstructor

### instance methods

    cons.arity -> aFixnum

Returns the number of arguments on this constructor.

    cons.new_instance( [anObject]* ) -> aJavaObject

Creates a new instance of the Java class this constructor belongs to, with the given arguments.

Example:

    cons = integer_class.constructor("int")
    result = cons.new_instance(java_integer_ten)
    result.java_type     # -> "java.lang.Integer"

    cons.inspect -> aString

Returns a human-readable representation of this Java method.

    cons.argument_types -> anArray

Returns a list of the names of the Java argument types.

## Class: Java::JavaField

    field.static? -> true or false

Returns true if this is a class ("static") field, false otherwise.

    field.public? -> true or false

Returns true if this field is public, false otherwise.

    field.final? -> true or false

Returns true if this field is final, false otherwise.

    field.value( anInstance ) -> aJavaObject

Returns the value of the instance field on the object given as argument. The instance argument must be a JavaObject of the class that this field belongs to.

Example:

    width_field = rectangle_class.field(:width)
    a_rectangle.java_type            # -> "java.awt.Rectangle"
    width_field.value(a_rectangle)   # -> some java.lang.Integer value

    field.set_value( anInstance, aValue ) -> aValue

Sets the value of this field in the given instance to the given value. The instance argument must be a JavaObject of the class that this field belongs to. The value argument must be a JavaObject of the same type as this field. The value argument is returned.

    field.name -> aString

Returns the name of the field.