NodeType
私はsとsの概念を持っていNode
ます。ANodeType
は、インスタンスを作成できる一連のメタデータですNode
(クラスとオブジェクトの関係全体によく似ています)。
さまざまなNodeType
実装とさまざまなノードの実装があります。
私のAbstractNodeType(NodeTypesのトップレベル)には、サブクラスによって実装されると、正しいNodeインスタンスを作成するababstractcreateInstance()
メソッドがあります。
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()
ますが、型の安全性についての警告を作成します。具体的には:
タイプの安全性:タイプThingTypeからのcreateInstance()の戻りタイプThingは、タイプAbstractNodeTypeからのTに準拠するために、チェックされていない変換が必要です。
そのような警告を引き起こすために私は何を間違っていますか?
これを修正するためにコードをリファクタリングするにはどうすればよいですか?
@SuppressWarnings("unchecked")
良くありません。問題を無視せずに、正しくコーディングしてこれを修正したいと思います。