Difference between Class and Class<?>

generics, java

Solution

It's the same as with all generic and raw types:

Class          // An unknown class (raw type)
Class<?>       // An unknown class (generic version)
Class<String>  // The String class

In this special case there's not much practical difference between `Class` and `Class<?>` because they both denote an unknown class. Depending on the existing declarations the compiler can demand a generic type instead of a raw type.

But: Since Java 1.5 you should use the generic form wherever possible. `Class<?>` clearly states that you mean "an unknown class", `Class<String>` cleary states that you mean the `String` class. A raw `Class` could mean both.

In the end it makes not much of a difference to the compiler but it makes a huge difference in making the intentions of your code more understandable and maintainable.

Problem

What is the difference between a `Class` and a `Class<?>` declaration. - `Class a;` - `Class<?> b;`

Original source