This pattern allows one to use "ADT" in Java.
You publish a TileEvent, and you use instanceof to know which kind of event it is.
TileEvent tileEvent = (TileEvent) object;
if (tileEvent instanceof TileEvent.Set) {
TileEvent.Set event = (TileEvent.Set) tileEvent;
System.out.printf("Set Event at %s on level %s with sprite %s",