【发布时间】:2019-11-24 12:50:35
【问题描述】:
考虑到 NullPointerException,我的以下代码有一点问题:
@Override
public List<FlowEdge<V>> getEdges() {
List<FlowEdge<V>> edges = new ArrayList<FlowEdge<V>>();
Collection<FlowEdge<V>> collection = new ArrayList<>();
collection = graph.get(getNodes()).values();
edges.addAll(collection);
return edges;
}
我知道这可以写得更短一些,但我想稍微拆分一下代码以找出我在哪里得到 NullPointerException。所以问题出在“collection =...”这一行。
Graph 是一个嵌套的 HashMap:
Map<V, Map<V, FlowEdge<V>> graph = new HashMap<>();
和 getNodes() 是在同一类中返回集合的方法。我已经测试过 getNodes() 是否提供了一个空集,但事实并非如此。
@Override
public Set<V> getNodes() {
Set<V> set = graph.keySet();
return set;
}
提前谢谢你。
【问题讨论】:
-
当您在下一行覆盖像
collection = graph.get(getNodes()).values();这样的变量时,初始化collection = new ArrayList<>();没有任何意义。除此之外,如果该行证明为NullPointerException,则该行中取消引用的值之一必须是null、graph或get返回的值。当graph与getNodes()方法中的graph相同时,您正在执行graph.get(graph.keySet()),这没有任何意义,并且将始终返回null。
标签: java collections hashmap