Reputation: 31517
what is a native object means i found the that java has peer class to interface with native objets?
Upvotes: 11
Views: 9796
Reputation: 15656
Java programs can use JNI to access to functions implemented in native code (anything compiled to machine code). Interfacing with object oriented native code requires a java class which forwards method calls from java to an instance of the native class using jni. This class is the java peer of the native class.
An example: We have the print_hello class in c++ which we need to use in a java program, to do this we need to define its peer in java.
The native class
class print_hello{
public:
void do_stuff(){std::cout<<"hello"<<std::endl;}
}
The peer class in java
class PrintHello{
//Address of the native instance (the native object)
long pointer;
//ctor. calls native method to create
//instance of print_hello
PrintHello(){pointer = newNative();}
////////////////////////////
//This whole class is for the following method
//which provides access to the functionality
//of the native class
public void doStuff(){do_stuff(pointer);}
//Calls a jni wrapper for print_hello.do_stuff()
//has to pass the address of the instance.
//the native keyword keeps the compiler from
//complaining about the missing method body
private native void do_stuff(long p);
//
//Methods for management of native resources.
//
//Native instance creation/destruction
private native long newNative();
private native deleteNative(long p);
//Method for manual disposal of native resources
public void dispose(){deleteNative(pointer);pointer = 0;}
}
JNI code (incomplete)
All methods declared native
require a native jni implementation. The following implements only one of the native methods declared above.
//the method name is generated by the javah tool
//and is required for jni to identify it.
void JNIEXPORT Java_PrintHello_do_stuff(JNIEnv* e,jobject i, jlong pointer){
print_hello* printer = (print_hello*)pointer;
printer->do_stuff();
}
Upvotes: 20
Reputation: 533530
A Java object has a peer/native object if it has some native methods written in C.
Upvotes: 1