当前位置: 首页 > 面试题库 >

在Java中以泛型实现vs扩展

樊腾
2023-03-14
问题内容

谁能告诉我第一和第二代码之间的区别是什么?MaxPQ代表优先级队列,它是可以相互比较的“关键”对象的集合。

代码1:

public class MaxPQ<Key extends Comparable<Key>>{
...
}

代码2:

public class MaxPQ<Key implements Comparable<Key>>{
...
}

第二个代码没有编译,但是对我来说不直观,为什么在使用泛型时为什么需要扩展而不是实现接口。


问题答案:

区别非常简单:第二个代码段不会编译,也永远不会编译。对于泛型,您始终extends对类和接口都使用。也super可以在此处使用关键字,但是它具有不同的语义。



 类似资料:
  • 有人能告诉我第一个和第二个代码之间的区别吗?MaxPQ代表优先级队列,它是可以相互比较的“键”对象的集合。 代码1: 代码2: 第二个代码没有编译,但我不明白为什么在使用泛型时需要扩展而不是实现接口。

  • 问题内容: 我不明白为什么要编译。我以为它检查了但没有检查? 问题答案: 泛型中的关键字在语义上与常规关键字略有不同。 当使用在泛型的上下文中,例如,这意味着,应该是一个类型的 任一 实现的接口(在情况下,当是接口), 或者 是子类(如果是一个类)。 可能的原因是,如果Generics中支持该关键字,则会使类型参数声明过于冗长。 例如,您将拥有: 相反,此方法的有效语法为: 实际上,您不需要关键字

  • 问题内容: 为了减少类的依赖性,我想将参数(使用泛型类)发送到扩展某些类并实现接口的构造函数,例如 可能吗? 此外,使用T类,我想使用T.getActivity()作为Context创建视图。 问题答案: T必须扩展Fragment并实现SomeInterface 在这种情况下,您可以声明以下内容: 这将需要扩展和实现类型的对象。 此外,使用T类,我想使用T.getActivity()作为Cont

  • 问题内容: 您如何进行这项工作: 不做 编辑 为什么这不起作用? 我正在将编译器消息标记为错误。 问题答案: Reimeus已经指出,您在编辑中要求的内容是不可能的。我只想扩展一下原因。 人们会认为您可以使用以下内容: 实际上,这就是我第一次看到这篇文章时想到的。但这实际上会导致编译器错误: 类型变量不能跟其他界限 为了帮助我解释原因,我想引用Victor Rudometov在OracleBlog

  • 我面临一个java泛型的问题,我的计划是实现一个二叉查找树(key 中的if语句不被接受,我认为这是因为我重写了comareTo,但是我应该如何比较泛型? 还尝试了而不是,结果相同。 最好的问候 编辑:编译器说:在这一行的多个标记-比较类型中的方法comareTo(捕获#1-of?)不适用于参数(可比)-行断点: KeyValPair[line: 39]-comareTo(KeyValPair)