In C#, I can put a type constraint on a generic parameter that requires the generic type to have a default parameterless constructor. Can I do the same in Java?
In C#:
public static T SomeMethodThatDoesSomeStuff<T>() where T : class, new()
{
// ... method body ...
}
The class and new() constraints mean that T must be a class that can be called with the new operator with zero parameters. What little I know of Java generics, I can use extends
to name a required super class. Can I use that (or any other supported operation) to achieve the above functionality?
No; in Java the typical solution is to pass a class, and doc the requirement of 0-arg constructor. This is certainly less static checking, but not too huge a problem
/** clazz must have a public default constructor */
public static <T> T f(Class<T> clazz)
return clazz.newInstance();
No.
Because of type erasure, the type of <T>
is not known at runtime, so it's inherently impossible to instantiate it.
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