質問

私の概念 NodeTypes Nodes.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> TAbstractNode の魔法の 共変微分を返します. 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();
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top