Java Type Erasure Problem

Ich habe ein Beispiel gemacht, um mein Problem zu demonstrieren:

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; }
}

Algorithmus.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)
    {

    }
}

Also, inAlgorithmus.java, Stellen Sie <Pair <T >> ein wird gesehen alsStellen Sie <T> ein und so habe ich Typ-Löschprobleme. Gibt es jedoch eine Möglichkeit, mit so etwas davonzukommen, ohne die Methoden anders zu benennen? Beide Varianten des Algorithmus sollen funktionierenTaber ich muss verschiedene argumente zulassen. Sie berechnen das Gleiche. Um Verwechslungen zu vermeiden, würde ich sie lieber nicht anders benennen. Gibt es eine Möglichkeit, dem entgegenzukommen?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage