Generic Method Type Safety
我有
我有各种各样的
在AbstractNodeType(NodeType的顶级)中,我有ab abstract
1 2 3 4 5 | public abstract class AbstractNodeType { // .. public abstract <T extends AbstractNode> T createInstance(); } |
在我的
1 2 3 4 5 6 7 8 9 10 | public class ThingType { // .. public Thing createInstance() { return new Thing(/* .. */); } } // FYI public class Thing extends AbstractNode { /* .. */ } |
这一切都很好,但
Type safety: The return type Thing for
createInstance() from the type
ThingType needs unchecked conversion
to conform to T from the type
AbstractNodeType
我做了什么错事引起这样的警告?
如何重新考虑代码以修复此问题?
由于协变返回的魔力,您只需将
两种方式:
(a)不要使用仿制药。在这种情况下可能没有必要。(尽管这取决于您没有显示的代码。)
(b)generify abstractnodetype如下:
1 2 3 4 5 6 7 8 | public abstract class AbstractNodeType<T extends AbstractNode> { public abstract T createInstance(); } public class ThingType<Thing> { public Thing createInstance() { return new Thing(...); } } |
类似的事情应该会奏效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | interface Node{ } interface NodeType<T extends Node>{ T createInstance(); } class Thing implements Node{} class ThingType implements NodeType<Thing>{ public Thing createInstance() { return new Thing(); } } class UberThing extends Thing{} class UberThingType extends ThingType{ @Override public UberThing createInstance() { return new UberThing(); } } |