Problema de eliminação de tipo de Java

Eu fiz um exemplo para demonstrar meu problema:

Metrical.java

public interface Metrical<T>
{
    double distance(T other);
}

Widget.java

public class Widget implements Metrical<Widget>
{
    private final double value;

    public Widget(double value) { this.value = value; }

    public double getValue() { return value; }

    public double distance(Widget other) { return Math.abs(getValue() - other.getValue()); }
}

Pair.java

public class Pair<T>
{
    private final double value;
    private final T object1, object2;

    public Pair(T object1, T object2, double value)
    {
        this.object1 = object1;
        this.object2 = object2;
        this.value = value;
    }

    public T getObject1() { return object1; }

    public T getObject2() { return object2; }

    public double getValue() { return value; }
}

Algorithm.java

import java.util.Set;

public class Algorithm<T extends Metrical<T>>
{
    public void compute(Set<T> objects)
    {

    }

    public void compute(Set<Pair<T>> pairs)
    {

    }
}

Então, emAlgorithm.java, Definir <Par <T >> está sendo visto como umSet <T> e, portanto, estou tendo problemas de eliminação de tipos. No entanto, existe alguma maneira que eu possa sair com algo parecido sem nomear os métodos de forma diferente? Ambas as variantes do algoritmo são destinadas a operar emTé, mas eu preciso permitir argumentos diferentes. Eles calculam a mesma coisa, então, em um esforço para evitar confusão, eu prefiro não nomeá-los de forma diferente. Existe alguma maneira de acomodar isso?

questionAnswers(5)

yourAnswerToTheQuestion