Consider the following generic converter class (simplified/incomplete for brevity)...
public abstract class BaseConverter <TModel> { public void convert(String data, Class<TModel> classOfModelType) { } public void convert(String data) { convert(data, TModel.class); // This doesn't work! } } Externally in the subclass I can call the first convert without issue. Consider this subclass with Car as the generic type argument. I can pass in Car.class, like so...
public class CarConverter extends BaseConverter<Car> { public void someFunction() { String someString; convert(someString, Car.class); } } What I'm trying to do is move as much as possible to the base class. Since 'Car' is known here and therefore convert expects Car.class, and TModel represents Car in the base class (for this concrete BaseConverter anyway), I was trying to use TModel.class in the base class, but as stated, it doesn't work.
So how do you achieve this in Java?
convert, why not use that same technique? Add a class type to the ctor, it'll give you a base class to use for the converter.convertmethod is what the firstconvertexactly does. TheClass<TModel>will be theClassobject of the generic type argument of the subclass.convertshould have been something like:public void convert(String data, Class<? extends TModel> classOfModelType) { }