The goal of a programming language's type system is to provide guarantees about what types can be encountered at certain points in your program; to document the values we expect to see in a way that the compiler can verify. But Java's type system has holes, the guarantees can be broken. Some of these holes are deliberate, mostly for backward compatibility. For example using raw types or unchecked
{{#tags}}- {{label}}
{{/tags}}