У меня есть понятия NodeType
с и Node
с. NodeType
- это набор метаданных, из которых вы можете создавать Node
экземпляры (во многом как отношения класса / объекта).
У меня есть различные реализации NodeType
и различные реализации Node.
В моем AbstractNodeType (верхний уровень для NodeTypes) у меня есть абстрактный метод createInstance()
, который после реализации подклассом создает правильный экземпляр Node:
public abstract class AbstractNodeType {
// ..
public abstract <T extends AbstractNode> T createInstance();
}
В моих NodeType
реализациях я реализую метод следующим образом:
public class ThingType {
// ..
public Thing createInstance() {
return new Thing(/* .. */);
}
}
// FYI
public class Thing extends AbstractNode { /* .. */ }
Это все хорошо, но public Thing createInstance()
создает предупреждение о безопасности типов. В частности:
Тип безопасности: тип возврата Thing for
createInstance () из типа
ThingType нуждается в непроверенном преобразовании
соответствовать Т от типа
AbstractNodeType
Что я делаю не так, чтобы вызвать такое предупреждение?
Как я могу изменить свой код, чтобы исправить это?
@SuppressWarnings("unchecked")
не очень хорошо, я хочу исправить это, исправив код, не игнорируя проблему!