这是一个类似于中提出的问题两个类之间可能递归的 Java 泛型 https://stackoverflow.com/questions/5929689/possibly-recursive-java-generics-between-two-classes。然而,就另一条线索中所述而言,一切正常。就我而言,不幸的是,我需要使用递归方法的附加类。
更具体地说:我想使用边和节点定义一个图类。然后,我想从使用道路和路口作为边和节点的图类派生街道图。此外,我想使用铁路和车站作为边和节点来导出公共交通图。最后,我想定义一个包含街道图或公共交通图的变量。这最后一步是我迄今为止无法实现的。言语就这么多了;现在让我们得到 Java 代码:
public interface Node<NT extends Node<NT, ET>, ET extends Edge<NT, ET>> {
/* internal datastructures here */
}
public interface Edge<NT extends Node<NT, ET>, ET extends Edge<NT, ET>> {
/* internal datastructures here */
}
public interface Graph<NT extends Node<NT, ET>, ET extends Edge<NT, ET>> {
/* internal datastructures here */
}
public class JunctionNode implements Node<JunctionNode, RoadEdge> {
}
public class RoadEdge implements Edge<JunctionNode, RoadEdge> {
}
public class StreetGraph implements Graph<JunctionNode, RoadEdge> {
}
public class PTNode implements Node<PTNode, PTEdge> {
}
public class PTEdge implements Edge<PTNode, PTEdge> {
}
public class PTGraph implements Graph<PTNode, PTEdge> {
}
现在,到目前为止的定义。我想做的是这样的:
StreetGraph street = new StreetGraph();
PTGraph ptGraph = new PTGraph();
Graph g = street;
...
g = ptGraph;
...
然而,我想避免对原始类型等发出警告。所以明显的方法是:
Graph<Node, Edge> g = street;
然而,这是不可能的,因为 Edge 不是 Node 的 ET 的有效替代品(这对我来说是绝对清楚的)。我需要类似的东西:
Graph<NT = Node<ET>, ET = Edge<NT>> g;
这是(正如预期的)无效的 Java 代码。
有什么想法,如何在没有警告/错误和类型安全的情况下实现有效的 Java 代码?
任何帮助表示赞赏。
谢谢,
马蒂亚斯