Listing 1

template <typename T> T* jobj_wrapper::arr_specific_return( ) const
{
    jboolean copied = false;
    jsize len = _env->GetArrayLength( (jarray) _jobj );
    if( !_env->ExceptionCheck() ){
        if( _env->IsInstanceOf( _jobj, java::classArrayOfIntegers ) ){ 
// if it is Java's int[] array
        jint* jarr = _env->GetIntArrayElements( (jintArray) _jobj, &copied );
        DEBUG_OUT( "\n jint* jarr = " << jarr;)
        // copy will be created if only needed
        T* pT = get_new_copy_on_need( jarr, len, newed, typeTp );
        data = new Impl< T* >( pT, jarr, newed, len );
      }
 ... 
        return &((Impl< vector<T> >*)data)->data[0];
    }
 ... 
}