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?