Problem kasowania typu Java
Zrobiłem przykład, aby zademonstrować mój problem:
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)
{
}
}
Więc wAlgorithm.java, Ustaw <Para <T >> jest postrzegany jakoUstaw <T> i dlatego mam problemy z usunięciem typu. Czy jest jednak jakiś sposób, aby uniknąć czegoś takiego bez nazywania metod inaczej? Oba warianty algorytmu mają działaćT, ale muszę pozwolić na różne argumenty. Obliczają to samo, więc starając się uniknąć nieporozumień, wolałbym ich nie nazywać inaczej. Czy jest jakiś sposób na to?