我被分配了一个问题:编写一个通用的加权元素
到目前为止,我已经创建了类并实现了Compariable,但在为W创建compareTo()方法时遇到了问题。我有:
public class WeightedElement<E, W extends Comparable<W>> {
public E element;
public W weight;
public WeightedElement() {
element = this.element;
weight = this.weight;
}
public int compareTo(W data) {
if (this.weight == data.weight) {
return 0;
} else if (this.weight < data.weight) {
return 1;
} else {
return 1;
}
}
}
我遇到的问题是,当我比较权重时,没有找到数据的权重。还有没有其他我必须创建的方法来正确地拥有一个在其中一个变量上实现可比较的类?谢谢你的帮助
public class WeightedElement<E, W extends Comparable<W>> implements Comparable<WeightedElement<E, W>> {
private final E element;
private final W weight;
public WeightedElement(E element, W weight) {
this.element = element;
this.weight = Objects.requireNonNull(weight, "'weight' should not be null");
}
@Override
public int compareTo(WeightedElement<E, W> other) {
return other == null ? 1 : weight.compareTo(other.weight);
}
}
您拥有正确的泛型,但就像权重元素本身一样,您必须对权重调用compareTo,不能使用
和函数类似,实现(implementation)也需要关注保持泛型。(原文:Similar to functions, implementations require care to remain generic.) struct S; // 具体类型 `S` struct GenericVal<T>(T,); // 泛型类型 `GenericVal` // GenericVal 的实现,此处我们
编译时,此代码将产生以下+错误: 问题是访问中的类型T与列表中的T不相同。如何修复此编译问题?
问题内容: 在Java实现中,我发现 我知道并了解不允许创建通用数组,但是我无法理解的是整个过程如何工作。我的意思是当我们做类似的事情时 上面的代码如何导致创建类型为Entry的数组 好吧,很少有人无法理解我的要求。改写我要问的是做这样的事情有什么意义 当它不导致 问题答案: 该实现使类型为对象的数组 而不提供通用类型参数(source)。这是允许的,但是要理解编译器不再保证类型安全。例如,在代码
会很好?或:
我试图编写一个函数来返回
问题内容: 我不明白为什么要编译。我以为它检查了但没有检查? 问题答案: 泛型中的关键字在语义上与常规关键字略有不同。 当使用在泛型的上下文中,例如,这意味着,应该是一个类型的 任一 实现的接口(在情况下,当是接口), 或者 是子类(如果是一个类)。 可能的原因是,如果Generics中支持该关键字,则会使类型参数声明过于冗长。 例如,您将拥有: 相反,此方法的有效语法为: 实际上,您不需要关键字