I have an abstract class:
public abstract class RootProcessor {
Class clazz;
}
I need to fill ClassT clazz;
The typesafe, but boilerplatey way to do this is to pass the Class
token "where the compiler can see it":
public abstract class RootProcessor {
Class clazz;
protected RootProcessor(Class clazz) {
this.clazz = clazz;
}
}
public class FooProcessor extends RootProcessor {
public FooProcessor() {
super(Foo.class);
}
}
If you're doing an unchecked cast but you "know what you're doing" and want the compiler to stop complaining, the correct approach would be localising the non-type-safe-but-you-know-they-work bits and using @SuppressWarnings
:
public abstract class RootProcessor {
Class clazz;
{ initClazz(); }
@SuppressWarnings("unchecked")
private void initClazz() {
// the usual verbiage you already have in your question
this.clazz = this.getClass().getGenericSuperclass().yadda().blah();
}
}
(I won't hold this against you :P)