2012-05-10 19 views
1

私はスーパークラス(GraphNode)とサブクラス(AStarNode)を持っています。 どちらも別のクラスのメンバになることができます。なぜなら、それをジェネリッククラス(GraphEdge)に変換したクラスです。汎用メンバのメンバ関数を呼び出す

私はスーパークラスのいくつかのメンバー関数を呼び出すしたいのですが、コンパイラはと文句を言い、このクラス内

The method addEdge(GraphEdge<T>) is undefined for the type T 

がどのように私はこの問題を解決することができたり、私のアプローチでもokですか?

public class GraphNode { 
    protected Graph graph; 

    public GraphEdge addEdge(){ 
    //some code 
    } 
} 

public class AStarNode extends GraphNode { 
    protected GraphEdge predecessor; 
} 

//The from and to properties can be either AStarNode or GraphNode 
public class GraphEdge<T> extends Entity { 
    protected T from; 
    protected T to; 

    public someMethod(){ 
     from.addEdge(this); 
    } 

} 
+1

必ず私たちは、すべて同じことを話しているようにするには:宣言はGraphEdgeがジェネリック型であるため、あなたがAStarNodeに生タイプとしてそれを使用してはならない、また

public class GraphEdge<T extends GraphNode> extends Entity { protected T from; protected T to; } 

する必要がありますあなたのクラス間の関係を示す短いコードスニペットを投稿してください。 –

+0

シナリオを説明するコードをいくつか追加しました。 – Hedge

答えて

5

あなたGraphEdgeクラスは何でもかまいませんジェネリック型を使用して、だけではなく、グラフノード:

は、ここでより良いシナリオを説明し、いくつかのコードです。

public class AStarNode extends GraphNode { 
    protected GraphEdge<PutSomeTypeHere> predecessor; 
} 
+0

ありがとうございます。パラメータ化されるのは52パーツですが、それは問題ありません。私のアプローチはどう思いますか?より良いものがありますか? – Hedge

+0

これらのクラスが何であるか、そのクラスが何を表現し、どのように使用されているかについてもっと知らなくても、言うことはできません。 –

関連する問題