簡體   English   中英

在可以確保類型與子 class 相同的情況下,如何在不強制轉換的情況下訪問超級 class 字段?

[英]How to access super class field without cast when it can be ensured that the type is the same as the sub class?

我有以下代碼。 我可以使用 generics 以某種方式訪問 class DjikstraNode的方法doSomething中的number屬性嗎? 我可以確保列表edges僅包含DjikstraNode類型的項目。

public class Node {
    protected List<Edge> edges = new ArrayList<>();
}
public class Edge {
    public Node source;
    public Node destination;
}
public class DjikstraNode extends Node {
    public int number;

    public void doSomething() {
        System.out.println(((DjikstraNode)edges.get(0).source).number);
    }
}

如果Edge class 將始終只包含DijkstraNode ,那么您根本不需要泛型類型。 只需將sourcedestination更改為DijkstraNode (如評論中提到的@markspace)。

但是如果你想讓它更靈活並與任何Node實現一起工作,那么你需要將子類類型傳遞給 super class。 在下面的代碼中, Edge class 被參數化並接受任何擴展Node類型的類型(假設給定Node object 中的sourcedestination字段始終具有相同的類型)。

    public class Node<T extends Node> {
        protected List<Edge<T>> edges = new ArrayList<>();
    }

    public class Edge<T extends Node> {
        public T source;
        public T destination;
    }

    public class DjikstraNode extends Node<DjikstraNode> { // typo in your code here: Dijkstra
        public int number;

        public void doSomething() {
            System.out.println(edges.get(0).source.number);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM