gpt4 book ai didi

java - 接口(interface)的奇怪泛型行为

转载 作者:行者123 更新时间:2023-12-01 08:08:07 24 4
gpt4 key购买 nike

我想创建一个通用类,它采用一些可比较的通用类型的元素。所以我这样做:

public class Foo<T extends Comparable<T>>

以及类(class)内部Foo我有这样的东西:

public void bar(T t)

我确信我可以编写这样的代码:t.compareTo(v) .

问题 1:为什么在使用泛型时我们有 extends而不是implements对于一个接口(interface)? Comparable不是一个类。

\\

现在假设我想创建另一个与上面类似的类,也实现bar方法。我想创建这个界面:

public interface Face<T extends Comparable<T>> {
public void bar(T t);
}

然后我换了类(class) Foo实现Face (public class Foo<T extends Comparable<T>> implements Face)。

问题 2:执行此操作时,我收到以下编译错误:

Foo 类型的方法 bar(T) 必须重写或实现父类(super class)型方法

这是为什么?

当我告诉 Eclipse add the unimplemented methods我得到: public void bar(Comparable t)而不是... bar(T t) .

最佳答案

  1. 不能代表 Java 泛型的设计者,但大概他们这样做是为了简化语言。 X extends Y的要点约束是我们要指定 X可分配给类型 Y - 最终是否 Y 并不重要是一个接口(interface)或一个类,所以让你使用implementsextends基于是否 Y其中一个似乎很麻烦。
  2. 尝试:public class Foo<T extends Comparable<T>> implements Face<T> - Face是一个带有类型参数的接口(interface),因此在扩展接口(interface)时需要填写该类型参数。

关于java - 接口(interface)的奇怪泛型行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737949/

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