Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型成员的调用成员函数_Java_Generics_Inheritance - Fatal编程技术网

Java 泛型成员的调用成员函数

Java 泛型成员的调用成员函数,java,generics,inheritance,Java,Generics,Inheritance,我有一个超类(GraphNode)和一个子类(AStarNode)。 两者都可以是另一个类的成员,这就是为什么我将使用它的类转换为泛型类(GraphEdge) 在这个类中,我想调用超类的一些成员函数,但编译器抱怨: The method addEdge(GraphEdge<T>) is undefined for the type T 类型T的方法addEdge(GraphEdge)未定义 我如何解决这个问题,或者我的方法是否还可以 下面是一些更好地描述场景的代码: public

我有一个超类(GraphNode)和一个子类(AStarNode)。 两者都可以是另一个类的成员,这就是为什么我将使用它的类转换为泛型类(GraphEdge)

在这个类中,我想调用超类的一些成员函数,但编译器抱怨:

The method addEdge(GraphEdge<T>) is undefined for the type T
类型T的方法addEdge(GraphEdge)未定义
我如何解决这个问题,或者我的方法是否还可以

下面是一些更好地描述场景的代码:

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);
   } 

}
公共类图形节点{
保护图;
公共图形边缘补遗(){
//一些代码
}
}
公共类AStarNode扩展GraphNode{
受保护的前体;
}
//from和to属性可以是AStarNode或GraphNode
公共类GraphEdge扩展实体{
保护T不受伤害;
保护T到;
公共方法(){
从.增补(本);
} 
}

GraphEdge类使用的泛型类型可以是任何类型,而不仅仅是GraphNode。宣言应该是

public class GraphEdge<T extends GraphNode> extends Entity {
   protected T from;
   protected T to;
}
公共类GraphEdge扩展实体{
保护T不受伤害;
保护T到;
}
此外,由于GraphEdge是泛型类型,因此不应将其用作AStarNode中的原始类型:

public class AStarNode extends GraphNode {
    protected GraphEdge<PutSomeTypeHere> predecessor;
}
公共类AStarNode扩展GraphNode{
受保护的前体;
}

为了确保我们谈论的是同一件事,请发布一个简短的代码片段,说明类之间的关系。我添加了一些代码来描述该场景。谢谢,只有52个部分需要参数化,但没关系。你觉得我的方法怎么样?有更好的吗?如果不知道这些类的用途、它们代表什么以及它们是如何使用的,那就很难说了。