![](/img/trans.png)
[英]How to cast generic Class type into an another generic Class type in Java
[英]“Importing” generic type from another class in Java
我試圖用節點和邊表示圖。
我有一個類Node必須是:
public class Node<NodeType>
還有另一個Edge類,我可以用任何方式對其進行參數化。 起初我以為Edge<EdgeType>
,但是由於它們將Nodes作為屬性,所以我最終做了以下事情(主要是因為Eclipse告訴我,如果不對Node進行原始設置,則Node是原始類型)
public class Edge<EdgeType, NodeType> {
private Node<NodeType> start;
private Node<NodeType> end;
private EdgeType value;
...
}
這使我能夠在Edge類中正常工作,但是Node類中有一些方法需要使用Edge,例如
public List<EdgeType> edgesValues(Node<NodeType> node) {
/*Returns a list of values of the edges between the node it is called on and the node given by argument*/
}
由於未定義EdgeType,因此無法使用。 由於無法在Node類中添加另一個參數,因此我不知道如何將EdgeType“導入”到該類中。
我會將edgesValues
方法放到一個由NodeType
和EdgeType
參數化的單獨的類中:
class Node<N> {
N value;
}
class Edge<E, N> {
Node<N> from;
Node<N> to;
E value;
}
class Graph<E, N> {
Node<N> newNode(N nodeVal) {
...
}
Edge<E, N> newEdge(E edgeVal, Node<N> from, Node<N> to) {
...
}
List<E> edgesValues(Node<N> node) {
...
}
}
如果您“固定了必須具有的類Node”,則應該從Edge
刪除EdgeType
,無論如何都不要使用它:
public class Edge<N> {
private Node<N> start;
private Node<N> end;
private int value;
}
在您的Node
類中,現在不需要任何其他類型參數:
public List<Edge<N>> edges(...) { ... }
無論如何,您可能不需要比int
更復雜的東西。
您的解決方案非常簡單,請使用通用方法:
public <EdgeType> List<EdgeType> edgesValues(Node<NodeType> node) {
}
但經過一個Node<NodeType>
作為參數的實例中的Node<NodeType>
犯規多大意義-記錯你擁有屬於自己的設計缺陷在那里,也許你應該用另一種設計模式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.