Although not the most popular feature of Java’s generics, bounded wildcards have their uses. On the negative side, bounded wildcards render type checking undecidable. On the positive side, bounded wildcards let us encode any computation at compile time; so, Java’s type checker can recognize any recursive language.
The first part of the talk will review how bounded wildcards are used in the implementation of Java’s standard library. The second part of the talk will review the proof that bounded wildcards render subtype checking undecidable. The third part of the talk will discuss a parser generator for fluent interfaces, which employs Java’s type checker as an interpreter for CYK parsers.