private native int foo(double bar);
Donc, finalement, cela a pour appeler une fonction C++ pour sa mise en œuvre. En particulier, il finirez par l'appel d'une fonction avec un nom à quelque chose comme:
Java_MyClass_foo
Qu'advient-il si il y a plusieurs native foo méthodes avec des signatures différentes? Les Complications. Si vous le faites, Java ajouter des informations de type dans le nom de la méthode qu'il cherche. Mais il est tout simplement plus facile si vous vous en tenez à la non-méthodes surchargées.
public int foo(double bar) {
return foo0(bar);
}
private native int foo0(double bar);
foo0
a été donné un nom unique, il ne devrait jamais être une raison pour en ajouter un autre, foo0
. Cela empêche la mise en œuvre du C++ simple, il n'a jamais à traiter avec les noms déformés. Même si foo finalement gagné une surcharge, il appellera foo1
au lieu de foo0
et le C++ JNI mise en œuvre n'aurez pas à traiter avec le supplément de complications de la surcharge.