質問
私の概念 NodeType
s Node
s.A NodeType
バメタデータを作成できます Node
インスタンスからダウンになるかも知れませんが、全クラスオブジェクトです。
私は様々な NodeType
実装は、各ノードになります。
私のAbstractNodeType(トップレベルのNodeTypesしていまab概要 createInstance()
方法は、一度実施するサブクラスを作成し、正しいノードのインスタンス:
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()
を作成し情報をタイプ。具体的には:
タイプの安全:の戻り値の型のこと createInstance()タイプから ThingTypeニーズにチェックなしに変換 従Tタイプから AbstractNodeType
何してるわけではありませんので間違いを起こすような警告?
かえる要因は自分のコードを修正。
@SuppressWarnings("unchecked")
ないことにより、これを解決符号化を用い、正しく表してくださいは無視す。
解決
できるだけで交換 <T extends AbstractNode> T
と AbstractNode
の魔法の 共変微分を返します. Java 5
追加インターネットで提供されませんのパブは、そのすべてを
他のヒント
どのよう
(a)使用しないジェネリック医薬品.あるんじゃないでしょうかは不要です。がることができるコードすhavnな表示します。)
(b)Generify AbstractNodeTypeとして
public abstract class AbstractNodeType<T extends AbstractNode> {
public abstract T createInstance();
}
public class ThingType<Thing> {
public Thing createInstance() {
return new Thing(...);
}
}
うべき作品:
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();
}
}