De exemplu, metoda Java:
lungul f (int n, String s, int [] arr);
are următoarea semnătură de tip:
(ILjava / lang / String;
Hmm. nu gros și nu foarte clar. Voi încerca să descriu cu propriile mele cuvinte.
JNI-semnătură constă dintr-o listă de tipuri de parametrii formali și tipul de întoarcere. Formatul de înregistrare similar cu definiții metoda Pascal-stil: în primul rând, atunci parametrii valoarea returnată (de altfel, mulți oameni nu știu că multe concepte Java au fost copiate din limba și sistemul de operare Oberon este încă de dezvoltare idei N.Virta, Pascal creator). Spațiile JNI de semnătură sunt interzise - fiecare caracter are o semnificație și nu poate fi eliminată fără pierderea sensului. Elementele listei de parametri nu sunt separate de simboluri. Notația pentru tipurile de parametri formali este mai jos. Condiționat, există 4 reguli:
- Tipuri primitive: codate de litera corespunzătoare alfabetului latin (a se vedea tabelul de mai sus):
- Arrays: pentru a indica faptul că nu va fi trecut un tip scalar, dar matricea va folosi caracterul "[". Denumirea de tip este tipul elementului de matrice care este situat în partea dreaptă a brațului pătrat. Dimensiunea matricei nu este indicată.
- Tipuri de referință (obiecte): desemnarea clasa începe cu litere mari L, după care nu există nici un spațiu numele complet al clasei constând din: Pachetul (pachete imbricate sunt separate prin slash-uri) și numele clasei (și separate printr-o bară oblică). Înregistrările sunt sensibile la litere mari și mici. După numele clasei, trebuie utilizată o virgulă, care este sfârșitul definiției de tip. Vă atrag atenția asupra faptului că nu puteți să omiteți virgula (inclusiv descrierea tipului valorii returnate a metodei).
- Tipul de returnare void (adică nimic) este înlocuit cu un "V"
Acum voi demonstra acest lucru în practică:
1. int MyMethod1 (float a, char b) -> (FC) I
2. int [] MyMethod2 (lung [] a) -> ([J] [I
3. void MyMethod3 (package1.subpackage2.MyClass [] a, String b) -> (Lpackage1 / subpackage2 / Clasa_Mea; Ljava / lang / String;) V
4. package1.subpackage2.MyClass [] MyMethod4 (String o clasa [] b, float c) -> (Ljava / lang / String; [java / lang / Clasa F) [Lpackage1 / subpackage2 / Clasa_Mea;
Atât de magice la prima vedere, secvențele de personaje sunt destul de simple (cu diferența față de semnăturile din limba C).
P.S. Am scris această notă pe tableta din metrou. Sa dovedit că tabletele sunt potrivite pentru crearea conținutului. Deși comoditatea tastaturii Android poate funcționa în continuare))
Pentru mai multe informații despre capacitățile de optimizare a compilatorului, consultați Notificarea noastră de optimizare.