2012-05-10 6 views
1

У меня есть суперкласс (GraphNode) и подкласс (AStarNode). Оба могут быть членами другого класса, поэтому я превратил класс, который использует его в общий класс (GraphEdge).Вызов функции-члена общего элемента

Внутри этого класса я хотел бы назвать некоторые члены-функции супер-класса, но компилятор жалуется:

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

Как я могу это исправить или мой подход даже хорошо?

Вот код, который лучше описывает сценарий:

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

Чтобы убедиться в том, что мы все говорим о том же , пожалуйста, отправьте короткий фрагмент кода, который иллюстрирует взаимосвязь между вашими классами. –

+0

Я добавил код для описания сценария. – Hedge

ответ

5

Ваш класс GraphEdge использует общий тип, который может быть что угодно, а не только GraphNode. Декларация должна быть

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

Кроме того, поскольку GraphEdge является универсальным типом, вы не должны использовать его в качестве исходного типа в AStarNode:

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

Благодарим вас, только 52 части для параметризации, но это нормально. Как вы думаете о моем подходе? Есть ли лучший доступный? – Hedge

+0

Невозможно сказать, не зная больше о том, для чего предназначены эти классы, что они представляют и как они используются. –

Смежные вопросы