Class
is a parameterizable class, hence you can use the syntax Class<T>
where T
is a type. By writing Class<?>
, you’re declaring a Class
object which can be of any type (?
is a wildcard). The Class
type is a type that contains meta-information about a class.
It’s always good practice to refer to a generic type by specifying his specific type, by using Class<?>
you’re respecting this practice (you’re aware of Class
to be parameterizable) but you’re not restricting your parameter to have a specific type.
Reference about Generics and Wildcards: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
Reference about Class
object and reflection (the feature of Java language used to introspect itself): https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html