2012-05-10 8 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

우리 모두가 같은 일에 대해 이야기하고 있는지 확인하려면 GraphEdge는 제네릭 형식이기 때문에 선언은 AStarNode의 원시 형태로 사용하지 말아야합니다, 또한

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

해야한다 수업 간의 관계를 보여주는 짧은 코드 스 니펫을 게시하십시오. –

+0

시나리오를 설명하는 코드를 추가했습니다. – Hedge

답변

5

귀하의 GraphEdge 클래스는 무엇이든 될 수있는 제네릭 형식을 사용하고, 단지 GraphNode :

여기에 더 나은 시나리오를 설명하는 코드입니다.

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

고맙습니다. 단지 52 개의 부품 만 매개 변수화 할 수 있지만 괜찮습니다. 내 접근 방식에 대해 어떻게 생각하세요? 사용할 수있는 것이 있습니까? – Hedge

+0

이 클래스가 무엇인지, 클래스가 나타내는 것과 사용 방법에 대해 알지 못해서는 말하기가 불가능합니다. –

관련 문제