I have the concept of NodeType
s and Node
s. A NodeType
is a bunch of meta-data which you can create Node
instances from (a lot like the whole Class / Object relationship).
I have various NodeType implementations and various Node implementations.
In my AbstractNodeType (top level for NodeTypes) I have ab abstract createInstance()
method that will, once implemented by the subclass, creates the correct Node instance:
public abstract class AbstractNodeType {
// ..
public abstract <T extends AbstractNode> T createInstance();
}
In my NodeType
implementations I implement the method like this:
public class ThingType {
// ..
public Thing createInstance() {
return new Thing(/* .. */);
}
}
// FYI
public class Thing extends AbstractNode { /* .. */ }
This is all well and good, but public Thing createInstance()
creates a warning about type safety. Specifically:
Type safety: The return type Thing for createInstance() from the type ThingType needs unchecked conversion to conform to T from the type AbstractNodeType
What am I doing wrong to cause such a warning?
How can I re-factor my code to fix this?
@SuppressWarnings("unchecked")
is not good, I wish to fix this by coding it correctly, not ignoring the problem!