- Language support
- Runtime library support
- Differences between JRE and emulated classes
- Classes that provide similar functionality
GWT supports most of the core Java language syntax and semantics, but there are a few differences you will want to be aware of.
Note: As of GWT 1.5, GWT compiles the Java language syntax that is compatible with J2SE 1.5 or earlier. Versions of GWT prior to GWT 1.5 are limited to Java 1.4 source
compatibility. For example, GWT 2.0 supports generics, whereas GWT 1.4 does not.
It is important to remember that the target language of your GWT application
application in development mode
mode (previously known as hosted mode and web mode,
- Intrinsic types: Primitive types (boolean, byte, char, short, int, long, float, and
double), Object, String, arrays, user-defined classes, etc. are all supported, with a couple of caveats.
are therefore implemented in production mode as if on doubles. Primarily, that means overflowing an integral data type (byte, char, short, int) will
not wrap the underlying value as Java specifies. Instead, the resulting value will outside of the legal range for that data type. Operations on float are performed as
double and will result in more-than-expected precision. Integer division is implemented to explicitly round to the correct value.
long primitives are emulated as a pair of 32-bit integers, and work reliably over the entire 64-bit range. Overflow is emulated to match the expected behavior. There are
- Exceptions: try, catch, finally and user-defined exceptions are supported as normal, although Throwable.getStackTrace() is
not meaningfully supported in production mode.
Note: Several fundamental exceptions implicitly produced by the Java VM, most notably NullPointerException, StackOverflowError, and
- Assertions: assert statements are always active in
development mode because it's a great way for GWT libraries to provide lots of
helpful error checking while you're debugging. The GWT compiler removes and
ignores all assertions by default, but you can enable them in production mode by
specifying the -ea flag to Compiler.
real effect. Synchronization-related library methods are not available, including Object.wait(), Object.notify(), and Object.notifyAll(). The compiler
will ignore the synchronized keyword but will refuse to compile your code if the Object's related synchronization methods are invoked.
- Reflection: For maximum efficiency, GWT compiles your Java source into a monolithic script, and does not support subsequent dynamic loading of classes. This
and other optimizations preclude general support for reflection. However, it is possible to query an object for its class name using Object.getClass().getName().
finalization during garbage collection, so GWT is not able to be honor Java
finalizers in production mode.
- Strict Floating-Point: The Java language specification precisely defines floating-point support, including single-precision and double-precision numbers as
well as the strictfp keyword. GWT does not support the strictfp keyword and can not ensure any particular degree of floating-point precision in translated code,
so you may want to avoid calculations in client-side code that require a guaranteed level of floating-point precision.
Runtime library support
GWT supports only a small subset of the classes available in the Java 2 Standard and Enterprise Edition libraries, as these libraries are quite large and rely on functionality
that is unavailable within web browsers. To find out exactly which classes and methods are supported for core Java runtime packages, see the GWT JRE Emulation Reference.
Tip: You will save yourself a lot of frustration if you make sure that you use only translatable classes in your client-side code from the
very beginning. To help you identify problems early, your code is checked
against the JRE emulation library whenever you run in development mode. As a result, most uses of unsupported libraries will be caught the first time you attempt to run your
application. So, run early and often.
Differences between JRE and emulated classes
Some specific areas in which GWT emulation differs from the standard Java runtime:
result, GWT does not support standard Java serialization. Instead, GWT has an RPC facility that provides
automatic object serialization to and from the server for the purpose of invoking remote methods.
Note: For a list of JRE classes that GWT can translate out of the box, see the GWT JRE Emulation
Classes that provide similar functionality
In some classes, the functionality of the class is too expensive to be emulated entirely, so a similar routine in another package is provided instead. Here are some commonly
used routines that provide a subset of the native JRE functionality: