GWT: Как получить доступ к переменной Java из JSNI - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть этот метод:

public void testJSNI2(){
  String x = "test";
}

Я могу получить доступ к этому методу следующим образом:

helloJsni.@com.jsni.client.HelloJSNIImpl::testJSNI2(Ljava/lang/String;)

Но как мне получить доступ к строке x, которая определена внутриметод?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Вы не можете получить доступ к переменной x, потому что она находится в области действия метода, так же, как вы не сможете получить к ней доступ в коде Java.

3 голосов
/ 10 февраля 2015

Ответ не верный.Доза JavaScript и Java не действуют одинаково.Человек может получить доступ к любому полю из js с помощью JSNI:

public class JSNIExample {

  String myInstanceField;
  static int myStaticField;

  void instanceFoo(String s) {
    // use s
  }

  static void staticFoo(String s) {
    // use s
  }

  public native void bar(JSNIExample x, String s) /*-{
    // Call instance method instanceFoo() on this
    this.@com.google.gwt.examples.JSNIExample::instanceFoo(Ljava/lang/String;)(s);

    // Call instance method instanceFoo() on x
    x.@com.google.gwt.examples.JSNIExample::instanceFoo(Ljava/lang/String;)(s);

    // Call static method staticFoo()
    @com.google.gwt.examples.JSNIExample::staticFoo(Ljava/lang/String;)(s);

    // Read instance field on this
    var val = this.@com.google.gwt.examples.JSNIExample::myInstanceField;

    // Write instance field on x
    x.@com.google.gwt.examples.JSNIExample::myInstanceField = val + " and stuff";

    // Read static field (no qualifier)
    @com.google.gwt.examples.JSNIExample::myStaticField = val + " and stuff";
  }-*/;

}

Вы можете увидеть это здесь: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html

...