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

扩展通用类

元修然
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”只能用作一般约束,因为它具有“自我”或相关类型要求 有什么解决办法吗? 编辑:

  • 目的 使用部署配置来部署多个 Pod,并以此扩展缩放应用。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 创建工程1. CLI 登录到 OCP $ oc login https://master.example.com:8443 -u admin -p admin2. 创建工程 $ oc new-project lab08 创建一个新应用,测试缩放1. 创