Java warning: [unchecked] unchecked conversion

2019-02-20 03:33发布

问题:

I have the following (partial) class:

public class Graph<O> {
    private ArrayList<Edge> edges;

    public ArrayList<Edge> getEdges() {
        return edges;
    }
}

Now, when calling the method getEdges() somewhere else and storing the result in a variable of type ArrayList<Edge>, I get warning: [unchecked] unchecked conversion:

OtherFile.java:101: warning: [unchecked] unchecked conversion
        ArrayList<Edge> edges = graph.getEdges();
                                              ^
  required: ArrayList<Edge>
  found:    ArrayList

I have looked at multiple other questions about this warning, but I can't figure out what I'm doing wrong. getEdges() returns ArrayList<Edge>, so why can't I store its result in a variable of that exact type?

回答1:

That warning would come when you invoke the getEdges() method on raw type Graph. When that is the case, all the generic types are replaced with their erasure. So, for Graph raw type, the method signature becomes like:

public ArrayList getEdges();

Solution is to use parameterized type or wildcard types.