Java: простая проблема с интерфейсами и обобщениями - PullRequest
0 голосов
/ 02 декабря 2009

Я сделал интерфейс для работы с JGraphT. Мое предполагаемое использование похоже на Comparable, в котором реализация Comparable позволяет использовать объекты с определенными структурами данных. С другой стороны, у меня есть функция JGraphT, с которой я хочу работать с чем-либо, что Distanceable.

public interface Distanceable<E> {

    /**
     * A representation of the distance between these two objects.
     * If the distance between a0 and a1 is undefined, <code>a0.hasEdge(a1)</code> should return false;
     * @param o
     * @return
     */
    public int distance(E o);

    /**
     * Are these two objects connected?
     * @param o
     * @return True if the two objects are connected in some way, false if their distance is undefined
     */
    public boolean hasEdge(E o);
}

Вот моя функция JGraphT в JGraphtUtilities. Это не определено для Animal, но для Distanceable:

public static <E extends Distanceable> WeightedGraph<E, DefaultWeightedEdge> graphOfDistances(Set<E> nodes) {
    WeightedGraph<E, DefaultWeightedEdge> g = new SimpleWeightedGraph<E, DefaultWeightedEdge>(DefaultWeightedEdge.class);

    for (E a : nodes) {
        g.addVertex(a);
    }

    for (E a : nodes) {
        for (E a1 : nodes) {
            if (a.hasEdge(a1)) {
                g.addEdge(a, a1);
                g.setEdgeWeight(g.getEdge(a, a1), a.distance(a1));
            }
        }
    }

    return g;
}

Но это не работает. Компилятор выдает ошибку в этой строке в другом классе, который вызывает этот метод:

WeightedGraph<Animal, DefaultWeightedEdge> graphOfAnimals = JGraphtUtilities.graphOfAnimals(zoo);

Ошибка:

The method graphOfAnimals(Set<Animal>) is undefined for the type JGraphtUtilities

Однако,

public class Animal implements Distanceable<Animal> {

Что я здесь не так делаю?

Другая проблема: компилятор выдает это предупреждение:

Distanceable is a raw type. References to generic type Distanceable<E> should be parameterized.

Какой тип я хочу дать ему, если я хочу, чтобы эта функция работала со всеми Distanceable объектами?

1 Ответ

2 голосов
/ 02 декабря 2009

Способ graphOfAnimals(Set<Animal>) не определено для типа JGraphtUtilities

Метод, который вы отображаете в своем примере кода: graphOfDistances. Проблема с методом graphOfAnimals. Итак ...

Есть ли у вас метод graphOfAnimals, который принимает Set<Animal> в классе JGraphtUtilities?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...