| <html> |
| <head> |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
| <title>Restrictions on long values with JSNI</title> |
| </head> |
| <body> |
| |
| <p>The Java <code>long</code> type cannot be represented in JavaScript |
| as a numeric type, so GWT emulates it using an opaque data structure. |
| This means that JSNI methods cannot process a <code>long</code> as a |
| numeric type. The compiler therefore disallows, by default, directly |
| accessing a <code>long</code> from JSNI: JSNI methods cannot have |
| <code>long</code> as a parameter type or a return type, and they |
| cannot access a <code>long</code> using a JSNI reference. If you |
| find yourself wanting to pass a <code>long</code> into or out of a |
| JSNI method, here are some options: |
| |
| <ol> |
| |
| <li> For numbers that fit into type <code>double</code>, use type |
| <code>double</code> instead of type <code>long</code>. |
| |
| <li> For computations that require the full <code>long</code> |
| semantics, rearrange the code so that the computations happen in |
| Java instead of in JavaScript. That way they will use the |
| <code>long</code> emulation. |
| |
| <li> For values meant to be passed through unchanged to Java code, |
| wrap the value in a <code>Long</code>. There are no restrictions |
| on type <code>Long</code> with JSNI methods. |
| |
| <li> If you are sure you know what you are doing, you can add the |
| annotation |
| <code>com.google.gwt.core.client.UnsafeNativeLong</code> to the |
| method. The compiler will then allow you to pass a |
| <code>long</code> into and out of JavaScript. It will still be an |
| opaque data type, however, so the only thing you will be able to |
| do with it will be to pass it back to Java. |
| |
| </ol> |
| </body> |
| </html> |