문제

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 문서를위한 좋은 시작은 다음과 같습니다.

GWT JSNI DOC

JSNI의 GWT 블로그 게시물

다른 팁

나는 당신이 유형 삭제에 빠지는 것 같아요. 모든 일반 객체 매개 변수는 실제로 런타임에 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 블로그 게시물 - 전에이 블로그를 본 적이 없었습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top