While in many ways Java is similar to C and C++, it is quite different
in its treatment of arrays. C arrays are based on the idea of pointer
arithmetic, which would be incompatible with Java's security
requirements. Java arrays are true objects (array types inherit from
java.lang.Object
). An array-valued variable is one that
contains a reference (pointer) to an array object.
Referencing a Java array in C++ code is done using the
JArray
template, which as defined as follows:
class __JArray : public java::lang::Object { public: int length; }; template<class T> class JArray : public __JArray { T data[0]; public: T& operator[](jint i) { return data[i]; } };
There are a number of typedef
s which correspond to typedef
s
from the JNI. Each is the type of an array holding objects
of the relevant type:
typedef __JArray *jarray; typedef JArray<jobject> *jobjectArray; typedef JArray<jboolean> *jbooleanArray; typedef JArray<jbyte> *jbyteArray; typedef JArray<jchar> *jcharArray; typedef JArray<jshort> *jshortArray; typedef JArray<jint> *jintArray; typedef JArray<jlong> *jlongArray; typedef JArray<jfloat> *jfloatArray; typedef JArray<jdouble> *jdoubleArray;
This template function can be used to get a pointer to the elements of the
array
. For instance, you can fetch a pointer to the integers that make up anint[]
like so:extern jintArray foo; jint *intp = elements (foo);The name of this function may change in the future.
This creates a new array whose elements have reference type.
klass
is the type of elements of the array andinit
is the initial value put into every slot in the array.
using namespace java::lang; JArray<String *> *array = (JArray<String *> *) JvNewObjectArray(length, &String::class$, NULL);
For each primitive type there is a function which can be used to create a new array of that type. The name of the function is of the form:
JvNewTypeArray
For example:
JvNewBooleanArray
can be used to create an array of Java primitive boolean types.
The following function definition is the template for all such functions: