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

这个Java泛型范例做什么,它叫什么?

耿锦
2023-03-14
问题内容

我正在看一些具有以下形式的Java类:

public 
abstract
class A <E extends A<E>> implements Comparable <E> {

   public final int compareTo( E other ) {
      //  etc
   }   
}

public 
class B extends A <B> {
   // etc
}

public 
class C extends A <C> {
   // etc
}

我在这里使用“可比较”只是为了说明通用参数“ E”的可能用法。泛型/继承的这种用法是否有名称?它是干什么用的?

我的印象是,这允许抽象类提供方法的通用实现(例如compareTo),而不必在子类中提供它。但是,在此示例中,与继承的方法不同,它将限制子类在同一子类的其他实例(而不是任何“
A”子类)上调用compareTo。听起来对吗?

无论如何,只是好奇是否有大师曾经看过这个,并且知道它在做什么。

谢谢!


问题答案:

在C
++中,它被称为好奇重复模板模式(CRTP)。我不知道它在Java中是否具有不同的名称(甚至具有名称),但它可能具有相似的用途。



 类似资料:
  • 在Hugo模板中,我知道您可以使用< code>function param调用函数: 但在文档中,我还看到您还可以: 我从未遇到过这种调用函数的方式(在Ruby/Python等语言中)。这是围棋特有的,还是雨果特有的?这种调用函数的方式是如何调用的?另外,如果你有不止一种类型的论点,你能做到吗?

  • 问题内容: 当您将JavaScript代码包装在这样的函数中时: 我注意到,这为许多网页上的我解决了范围界定问题。这种做法叫什么? 问题答案: 该模式称为 自我调用 ( self-invocation) ,一种 自我调用功能 。它可以创建一个闭包,但这是模式的效果(也许是预期的效果),而不是模式本身。

  • 这是一个框架的源代码,当我使用convert()函数时 让我感到奇怪的是,返回类型是新类型变量R,他只是调用this.setRecords(collect);但是setRecords()函数只接收列表 ! 为了验证这一点,我自己编写了一个接口,但是编译失败了

  • 观察:对于每个节点,我们可以重复使用它到目的地的最小路径,这样我们就不必重新计算它(dp)。此外,当我们发现一个循环时,我们检查它是否为负。如果不是,它不会影响我们的最终答案,我们可以说它没有连接到目的地(阉羊是否)。 伪代码: > 给定源节点u和目标节点v 初始化 Integer dp 数组,该数组存储相对于源节点的最小到达点节点的最小距离。dp[v]= 0,其他一切都是无限的 初始化boole

  • 我一直在努力学习什么是EJB bean,这意味着他们的实例在池中被管理,等等。真的不能很好地掌握它们。 你能给我解释一下它们到底是什么吗(实际上对于一个Java程序员来说)?他们是做什么的?他们的目的是什么?为什么要真正使用它们?(为什么不坚持?)也许是一个示例应用程序? 请仅参考更新的信息,即。关于EJB的过时信息可能具有误导性。 对于EJB学习初学者,请注意: EJB基于分布式对象,这是指运行

  • 问题内容: 我正在使用泛型编写某些东西,令我惊讶的是,我发现这行不通: 那我不能实例化泛型吗?没有任何方法可以做到这一点吗? 问题答案: 是的,这真是令人讨厌。 我使用的解决方法是强制客户端在构造新类时传递类-即 然后您可以使用。