gpt4 book ai didi

Java 类型删除问题

转载 作者:行者123 更新时间:2023-12-02 08:57:02 25 4
gpt4 key购买 nike

我做了一个例子来演示我的问题:

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

}
}

因此,在 Algorithm.java 中,Set< Pair< T >> 被视为 Set< T >,因此我我遇到类型删除问题。但是,有什么方法可以在不以不同方式命名方法的情况下摆脱类似的情况吗?该算法的两种变体都旨在对 T 进行操作,但我需要考虑不同的参数。它们计算相同的东西,因此为了避免混淆,我宁愿不以不同的方式命名它们。有什么办法可以解决这个问题吗?

最佳答案

不,没有。

您必须记住,有人可以仅使用普通 Set 来调用您的方法,在这种情况下会调用哪一个?

这就是为什么你不能这样做。就像你做不到一样:

interface A {
void blah(Set set);
void blah(Set<T> set);
}

同样的问题。

类型信息在运行时不可用(即类型删除)。

关于Java 类型删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com