JGraphT SimpleGraph и UndirectedGraph

Я хочу сделать Graph, используя библиотеку JGraphT. Мой код ниже:

private UndirectedGraph<State, DefaultEdge> graph;
private HashMap<String, State> vertixList;

public  MapGraph(HashMap<String, State> vertixList, List<Transition> transList) {
    graph = new SimpleGraph<State, DefaultEdge>(DefaultEdge.class);
    this.vertixList = vertixList;

    // add all vertices
    for(State s : vertixList.values())
        graph.addVertex(s);

    // add all transitions
    for(Transition t : transList)
        graph.addEdge(t.start, t.end);

}

Но у него ошибка компиляции.

error: incompatible types: SimpleGraph<State,DefaultEdge> cannot be converted 
to UndirectedGraph<State,DefaultEdge>

Встречается в строке 5. (graph = new SimpleGraph) Что делать? Нужна помощь... (Я использую Android Studio!)


person zer0byte    schedule 20.08.2018    source источник
comment
пожалуйста, напишите правильный рабочий пример. Удалите то, что не важно. Это, например, отлично работает: частный график UndirectedGraph‹Integer, DefaultEdge›; public Test(){graph = new SimpleGraph‹›(DefaultEdge.class); System.out.println(график); }   -  person Joris Kinable    schedule 21.08.2018


Ответы (1)


Вы объявили свою переменную graph как

private UndirectedGraph<State, DefaultEdge> graph;

но вы пытаетесь определить это как

graph = new SimpleGraph<State, DefaultEdge>(DefaultEdge.class);

который не будет работать из-за несовместимых типов.

Ваш график — UndirectedGraph, а вы назначаете SimpleGraph. Вот в чем дело…

Определите его (в строке 5) как

graph = new UndirectedGraph<State, DefaultEdge>(DefaultEdge.class);
person deHaar    schedule 20.08.2018
comment
Это невозможно. UndirectedGraph — это интерфейс, и SimpleGraph реализует этот интерфейс. - person Joris Kinable; 21.08.2018