What is the difference between a Class
and a Class<?>
declaration.
Class a;
Class<?> b;
Class is a Java class just like Object and String are classes. In short, both are essentially the same, but you can keep a reference of a String. class object using the Class class.
It is Kotlin Reflection API, that can handle Kotlin features like properties, data classes, etc. By using ::class. java , you get an instance of Class. It is Java Reflection API, that interops with any Java reflection code, but can't work with some Kotlin features.
Functions do specific things, classes are specific things. Classes often have methods, which are functions that are associated with a particular class, and do things associated with the thing that the class is - but if all you want is to do something, a function is all you need.
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 no 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.
Class javadoc:
Type Parameters:
T
- the type of the class modeled by thisClass
object. For example, the type ofString.class
isClass<String>
. UseClass<?>
if the class being modeled is unknown.
Use of Class
without the type parameter is similar to using any generic class (Map
, List
, etc.) without the type parameter - either it's a pre-1.5 legacy usage or it's just a segment of code that does not care about unchecked type casting.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With