I want to return an instance of an object of same type of the Class object passed in. The type passed in can be ANYTHING. Is there a way to do this with Generics?
To clarify -- I don't want the caller of the method to not have to cast to the Class of the object they passed in
For example,
public Object<Class> getObject(Class class)
{
// Construct an instance of an object of type Class
return object;
}
// I want this:
MyClass myObj = getObject(MyClass.class);
// Not this (casting):
MyClass myObj = (MyClass)getObject(MyClass.class);
I assume you want to create a new instance of that class. This would not be possible using generics (you can't call new T()) and would also be quite limited using reflection.
The reflection approach could be:
//class is a reserved word, so use clazz
public <T> T getObject(Class<T> clazz) {
try {
return clazz.newInstance();
}
catch( /*a multitude of exceptions that can be thrown by clazz.newInstance()*/ ) {
//handle exception
}
}
Note that this only works if the class has a no-argument constructor.
However, the question would by why you need that instead of just calling new WhatEverClassYouHave().
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