Re: Using JNI to determine whether an object implements an interface
Steve Sobol wrote:
I have an interface, let's call it I...
I have a class C that may or may not implement I.
I have a chunk of native (C++) code that uses C.
In the C++ program, I want to check whether C implements I.
Is this possible?
Reading the JNI docs, I only see a way to determine C's superclass;
this is not what I want to do.
Generally speaking if one has to resort to such reflective tricks, the code
needs restructuring. I don't say this so much for your sake, as for those who
come after and read this. In particular, if JNI native-side code needs
reflective information out of the Java side, you should reflect on your
approach altogether. (Pun intended, obviously.)
I exclude Steve from this advice specifically, because from reading his posts
over time I feel confident that he has a good reason to deviate from this
advice. I hope he does, because the technique introduces fragilities and
risks that must be accommodated.
Mike Schilling wrote:
JNI does allow you to call Java methods from native code, so you can
call Class.isAssignableFrom().
By the way, this would have been less confusing if you'd used a letter
other than "C" for the class. :-)
By convention, single-letter type names refer to generic parameters in Java.
The Java conventions suggest that otherwise we eschew single-letter
identifiers, with a select few exceptions.
--
Lew