Java 泛型 - 类型参数“K”不在其范围内;应该实施 X

我正在阅读关于泛型的 Java 文档,特别是关于有界类型的页面,我迷路了。这是我的代码的一个简单版本,对于上下文,我通常想要一个可比较的键,一个带有 an Integer,另一个抽象类带有Date,这里只是基本抽象类和整数实现:

抽象类:

public abstract class A<K extends Comparable<K>, V> extends TreeMap<K, V>

整数抽象类:

public abstract class B<K extends Integer, V> extends A<K,V>

我得到的错误是在 part 的第二个类的类型引用中extends A<K,V>。具体来说,我的 IDE 是 K 的基础并说Type parameter 'K' is not within its bound; should implement 'java.lang.Comparable<K>'

我对此感到困惑,因为在的定义中Integer,它实现了一个Comparable<Integer>,这还不足以满足这个要求吗?此外,当我尝试执行以下操作时public abstract class B<K extends Integer & Comparable<K>, V> extends A<K,V>,它也不起作用。

我对泛型有误解吗?


慕码人8056858
浏览 150回答 2
2回答

慕标5832272

由于Integer是最终类,因此正确的定义B是:public&nbsp;abstract&nbsp;class&nbsp;B<V>&nbsp;extends&nbsp;A<Integer,V>&nbsp;{ }您不需要K类型参数。

慕森王

发生编译器错误是因为虽然Date实现Comparable<Date>了,但子类Date可能没有实现Comparable<SubclassOfDate>,所以编译器会报错。您可以通过将A的声明更改为使用通配符来解决此问题:public abstract class A<K extends Comparable<? super K>, V> extends TreeMap<K, V>但是,您可能打算这样声明B:public abstract class B<V> extends A<Integer,V> {}Integer是final,没有其他类可以继承它。所以B不必在K.至于以Dateas 为键的类,您可能也想这样做:public abstract class C<V> extends A<Date,V> {}但由于Date不是final,您可以创建一个通用参数K extends Date:public abstract class C<K extends Date, V> extends A<K,V> {}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java