gpt4 book ai didi

java - 在保证类型与子类相同的情况下,如何在不进行强制转换的情况下访问父类(super class)字段?

转载 作者:行者123 更新时间:2023-12-01 21:34:42 25 4
gpt4 key购买 nike

我有以下代码。我可以在不使用泛型进行强制转换的情况下访问类 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 类始终只包含 DijkstraNode,那么您根本不需要泛型类型。只需将 sourcedestination 更改为 DijkstraNode (如评论中提到的 @markspace)。

但是如果您想让它更加灵活并与任何 Node 实现一起使用,那么您需要将子类类型传递给父类(super class)。在下面的代码中,Edge类被参数化并接受任何扩展Node类型的类型(假设sourcedestination字段在给定的 Node 对象始终具有相同的类型)。

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

关于java - 在保证类型与子类相同的情况下,如何在不进行强制转换的情况下访问父类(super class)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58806293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com