JSNI의 Java Hashmap 및 Mutlidimensional Array Type Sig?
문제
HASMAP를 입력으로 취하는 Java 메소드를 호출하는 메소드 JSNI가 있습니다. 난 노력 했어
handler.@com.mypackage::myMethod(Ljava/util/Hashmap;)(myHashMap);
handler.@com.mypackage::myMethod(Ljava/util/Hashmap<Ljava/lang/String,Ljava/lang/String>;)(myHashMap);
문자열을 포함 하거나이 사용법이 허용되는지 찾기 위해 올바른 유형 서명을 정의 할 수없는 것 같습니다.
gwt i에서 이것을하고 있기 때문에 해시 맵의 구현과 대체 접근 방식일지도 모르지만 string [] [] 배열을 입력으로 가져옵니다.
나는 졸을 좋아하고 싶었다
handler.@com.mypackage :: myMethod ([[ljava/lang/string;) (myArray);
그러나 나는 배열의 두 번째 차원에 대한 올바른 JNSI SNTAX를 찾는 또 다른 문제를 쳤다.
단일 치수 배열, 즉. [Ljava/lang/String;
괜찮지 만 두 번째 차원이 필요합니다.
좋은 JNSI DOC에 대한 도움/아이디어 또는 링크에 감사했습니다.
해결책
당신이 얻는 오류와 해시 맵으로 전달하려는 JavaScript 객체를 게시 할 수 있습니까? 컴파일 타임 오류가 발생한다고 가정하고 있습니까?
JSNI 문서를위한 좋은 시작은 다음과 같습니다.
다른 팁
나는 당신이 유형 삭제에 빠지는 것 같아요. 모든 일반 객체 매개 변수는 실제로 런타임에 Java.lang.object입니다. 나는 제네릭이 JNI에 노출된다고 생각하지 않습니다.
나는 JNI 코드를 작성했지만 기본 코드에서 일반 유형을 사용하려고 시도하지 않았으므로 확실하지 않습니다. 인터넷 검색은 구체적인 참조 나 예제가 없었습니다.
보다 Java VM 유형 서명 JNI (및 JSNI)에 사용 된 유형 서명에 대한 참조.
그러나 어쨌든 Java Hashmap을 JavaScript에 전달할 필요는 없습니다. 대신 JsonObject를 사용하고 기본 JavaScript 객체를 JavaScript 코드에 전달하십시오. 다음과 같이 보입니다.
public void callFoo() {
JSONObject obj = new JSONObject();
obj.put("propertyName", new JSONString("properyValue"));
JavaScriptObject jsObj = obj.getJavaScriptObject();
nativeFoo(jsObj);
}
public native void nativeFoo(JavaScriptObject obj) /*-{
$wnd.alert(obj['propertyName']);
}-*/;
이것은 대략적으로 편집됩니다.
var obj = {'propertyName': 'propertyValue'};
$wnd.alert(obj['propertyName']);
알았어, 그것을 본 후 ...
다차원 문자열 배열을 제공하는 문서 나 배열을 찾을 수 없었습니다. 해시 맵을 사용하여 다음을 수행했습니다.
handler.@com.mypackage::myMethod(Ljava/util/Hashmap;)(myHashMap);
유형을 정의하지 않고 입력을 정의하는 경우 작업했습니다. 와 같은:
HashMap myHashMap = new HashMap();
이것은 JSNI에 유형의 해시 맵을 제공합니다 <Object, Object>
.
그런 다음 해시 맵의 내용을 문자열로 캐스팅하여 반대쪽의 물체를 처리합니다.
링크에 Rusty에게 감사합니다.
GWT JSNI DOC - 이것은 원시의 올바른 형식을 얻는 데 좋습니다.
JSNI의 GWT 블로그 게시물 - 전에이 블로그를 본 적이 없었습니다