Determine the signature of a methodby Pigbrain
signature of a method
- JNI에서 자바 오브젝트의 메소드를 호출하기 전에 메소드의 signature가 필요하다
- 다음 메소드의 signature는 (ILJAVA/LANG/STRING;[I)J 형태로 표현이 된다
long myMethod (int n, String s, int[] arr);
- signature는 2개의 부분으로 구성된다
- 첫번째 부분은 괄호( )로 둘러싸여있고 메소드의 argument를 나타낸다
- 두번째 부분은 위 괄호가 끝나는 부분에서 시작하며 메소드의 return 타입을 나타낸다
- 자바의 타입과 c의 타입은 다음처럼 매핑된다
Type Chararacter
boolean Z
byte B
char C
double D
float F
int I
long J
object L
short S
void V
array [
- 오브젝트임을 명시하기 위해 L 다음에 오브젝트의 클래스명이 나오고 세미콜론(;) 으로 끝난다
- JDK에 포함되어 있는 javap라는 유틸리티는 JNI에서 signature를 보기위해 매우 유용하다
X:\>javap -s java.awt.Label
Compiled from Label.java
public class java.awt.Label extends java.awt.Component {
public static final int LEFT;
/* I */
public static final int CENTER;
/* I */
public static final int RIGHT;
/* I */
java.lang.String text;
/* Ljava/lang/String; */
int alignment;
/* I */
static {};
/* ()V */
public java.awt.Label();
/* ()V */
public java.awt.Label(java.lang.String);
/* (Ljava/lang/String;)V */
public java.awt.Label(java.lang.String,int);
/* (Ljava/lang/String;I)V */
public void addNotify();
/* ()V */
java.lang.String constructComponentName();
/* ()Ljava/lang/String; */
public int getAlignment();
/* ()I */
public java.lang.String getText();
/* ()Ljava/lang/String; */
protected java.lang.String paramString();
/* ()Ljava/lang/String; */
public synchronized void setAlignment(int);
/* (I)V */
public void setText(java.lang.String);
/* (Ljava/lang/String;)V */
원문
- http://www.rgagnon.com/javadetails/java-0286.html
Published 10 October 2016