0

I made an interface to work with JGraphT. My intended use is like Comparable, in that implementing Comparable allows objects to be used with certain data structures. Simiarly, I have a JGraphT function that I want to work with anything that is 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);
}

Here is my JGraphT function in JGraphtUtilities. It's not defined for Animal, but for 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;
}

But it doesn't work. The compiler produces an error on this line in another class that calls this method:

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

The error is:

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

However,

public class Animal implements Distanceable<Animal> {

What am I doing wrong here?

Another issue: The compiler gives this warning:

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

What type do I want to give it, if I want this function to work with all Distanceable objects?

2
  • 1
    Can you show us JGraphtUtilitie as well. Does it have the method graphOfAnimals(Set<Animal>)? Commented Dec 2, 2009 at 20:32
  • The method you have included is called graphOfDistances(Set<E> nodes) not graphOfAnimals(Set<Animal>). Are you expecting the compiler to guess what method you actually wanted to call? Commented Dec 2, 2009 at 20:40

1 Answer 1

2

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

The method you're displaying in your code sample is graphOfDistances. The problem is with the method graphOfAnimals. So...

Do you have a graphOfAnimals method that takes a Set<Animal> in the JGraphtUtilities class?

Sign up to request clarification or add additional context in comments.

3 Comments

now, but there is a method that takes Set<Distanceable>, as shown above.
@Rosarch: see my edit, if there is such a method you didn't display it.
ok - another issue - the compiler wants a type parameter for Distanceable in graphOfDistances(). What do I give it?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.