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

扩展通用类

元修然
2023-03-14
问题内容

public class MyGeneric {}

public class Extend1<T, E> extends MyGeneric<T, E> {}

public class Extend2 extends MyGeneric<String, Object> {}

据我所知,以上示例中的两个子类均有效。我想知道Java如何知道何时在实例化子类时定义超类中给定的类型,以及何时将它们定义为实际的类名(即,它如何知道T,E不是类名)?

旁注,是否允许(即使不常见)对通用类型使用多个字母?如果(由于某些严重的计划错误)类型与现有类冲突,该怎么办?

public class E{}
public class Foo<E>{}

那会发生什么呢?

编辑:感谢您的及时答复。为了回答我的第一个问题,约阿希姆的答案是最有效的。


问题答案:

让我们看一下这个定义:

public class Extend1<T, E> extends MyGeneric<T, E> {}

在这里TE分别以两次不同的角色出现

  • Extend1<T,E>定义 类型参数。这意味着该类型Extend1具有两个(无界)类型参数TE 告诉Java编译器那些 使用 它们的人Extend1需要指定类型。
  • extends MyGeneric<T,E>使用 先前定义的类型参数。如果TE没有已知的类型参数在这里,然后TE将是简单类型的引用,即会寻找类的编译器(或接口,…)命名TE(最有可能找不到它们)。

是的,类型自变量遵循与Java中其他任何标识符相同的语法规则,因此您可以使用多个字母ABC甚至名称,这可能会造成混淆(使用称为String合法的类型自变量,但
高度 混乱)。

单字母类型参数名称只是一种非常常见的命名策略。



 类似资料:
  • 问题内容: 我想为此创建一个扩展名,仅影响… 我了解这些说明是相关的,但不确定如何: 扩展通用类型时,不提供类型参数列表作为扩展定义的一部分。而是在扩展程序的正文中提供原始类型定义的类型参数列表,并且原始类型参数名称用于引用原始定义的类型参数。 基本上,我正在尝试使用此方法: 在没有参数的情况下采取行动…这可能吗? 问题答案: Swift 3.1更新 从Swift 3.1(Xcode 8.3 be

  • 问题内容: 在Java中,我可以从通用超类型进行扩展吗?根据这篇文章,看来我应该能够:http : //www.ibm.com/developerworks/java/library/j-djc05133.html。 但是,当我在应用程序中执行类似操作时,出现以下错误: “无法将类型参数T引用为超类型。” 有谁知道我是否能够从Java中的泛型超型扩展?而且,如果是这样,是否需要特殊的东西来实现这一

  • 问题内容: Java是否可以让类扩展泛型,以便您可以将方法注入通过代码传递的任何类中?(或者是否有其他方法可以使用Java将方法注入或重写到现有类中?) 我所说的“扩展通用类型”是这样的(类“ Textended GameObject”属于游戏,可能不会更改,并且是未知的,因为它是在运行时(从其他mods)加载到游戏中的): onTick由GameEngine调用,通过这种方式,我可以将每个现有的

  • 考虑以下TS定义: 没什么问题,但我想知道是否有一个等效?显然,可以将泛型传递到接口中,尽管这不是我想要的,例如: 这里的示例是在React代码的上下文中,但潜在的问题是基本的TS。

  • 问题内容: 假设我已经定义了这样的协议: 现在,我想扩展并采用该协议。 但是下面的代码: 由于错误而无效 错误:必须在非专用泛型类型“ Array”上声明受约束的扩展,并使用“ where”子句指定约束 我发现类似的问题,但建议的解决方案是使用,但在这种情况下它会导致错误: 错误:协议“ CollectionType”只能用作一般约束,因为它具有“自我”或相关类型要求 有什么解决办法吗? 编辑:

  • 本文向大家介绍tk.mybatis扩展通用接口使用详解,包括了tk.mybatis扩展通用接口使用详解的使用技巧和注意事项,需要的朋友参考一下  一.tk.mybatis已经为我们封装好了许多拆箱即用的通用mapper,但在实际的项目开发中想必不少小伙伴在数据库设计中都会采用逻辑删除这种方案,再去使用通用的mapper接口就不行了。 这时候就需要我们封装一些扩展的通用Mapper接口。 二.项目中