The
Java Language Specification is the official specification of the Java language. It's main goal is to specify the rules of the Java programming language as precisely and unambiguously as possible. It's very useful as a reference, if you need to know exactly how some specific feature works, but it is not a tutorial to learn Java - don't expect in-depth explanations and extensive examples for each of the language features. Besides the JLS there is the Java Virtual Machine Specification (which you can find on the same page) which is the official specification of how a JVM should work.
Oracle's
Java Tutorials are a good place to learn Java - there are lots of tutorials about lots of different subjects, from absolute beginner's level up to much more advanced topics. Have a look, for example, at the
generics tutorial (since that was one of the topics you asked about).
The most extensive resource about generics is
Angelika Langer's Java Generics FAQ, it explains everything you ever want to know about generics.