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

参数化类型数组

向苗宣
2023-03-14
问题内容

我在弄清楚以下RHS中期望使用什么类型参数时遇到问题

ArrayList<Pair<ParseNode,ParseNode>>[] nodes = new ArrayList[indexes.length];

为什么副本<Pair<ParseNode,ParseNode>>不合法?


问题答案:

具体参数化类型的数组固有地被破坏。请记住,数组是协变的,数组类型检查是运行时操作。在运行时,所有泛型都已被擦除,因此Array
Store检查无法<Pair<ParseNode, ParseNode>>从中分辨出来<Pair<BigInteger,IOException>>

泛型的基本约定是:“我,编译器,保证如果编写的代码不生成警告,则在运行时永远不会得到类强制转换异常。”

编译器也不能向您保证,如果ArrayList<Pair<ParseNode,ParseNode>>在数组中放置了非的内容,它将能够给您带来编译时错误。如果添加错误的类型,运行时系统也无法保证会得到ArrayStoreException(如Language
Specification所述),而不是稍后将其取回时抛出ClassCastException。(第二部分实际上就是为什么它实际上是非法的,而不仅仅是警告,它会导致数组不遵守语言规范。)

因此,它不允许您以这种方式声明它们,并迫使您承认“不安全”警告。这样说:“我告诉过您,我不能保证使用此数组不会导致任何类强制转换异常,这取决于您确保只在此处放置正确的东西。”



 类似资料:
  • Generic类可以具有参数化类型,其中类型参数可以用参数化类型替换。 以下示例将展示上述概念。 例子 (Example) 使用您选择的任何编辑器创建以下Java程序。 GenericsTester.java package com.wenjiangs; import java.util.ArrayList; import java.util.List; public class Generics

  • 我面临泛型的问题。 下面是我使用泛型的一个类: 在这里,我们的类:使用进行参数化。 我想在我们的一种方法中指定类型,如下所示: 但是,我遇到以下编译器错误:

  • 一、泛型 Scala 支持类型参数化,使得我们能够编写泛型程序。 1.1 泛型类 Java 中使用 <> 符号来包含定义的类型参数,Scala 则使用 []。 class Pair[T, S](val first: T, val second: S) { override def toString: String = first + ":" + second } object ScalaAp

  • 我想创建一个rest来在服务器和客户端之间进行通信。 下面给出的构造函数: 对于普通类型,我可以执行以下操作: 如何传递泛型类型,如: 以下代码无效: 我遇到一个运行时错误:无法强制转换为ParameteredType。

  • 我有一个抽象超类和两个非抽象子类和。如何在超类方法中定义类型,如下所示 我允许在子类方法中编写具体类型(例如,或) 在上面的示例中,子类方法不会覆盖超类方法。

  • 问题内容: 我有一个笼子课: 我试图在另一个类main方法中实例化Cage对象: 我收到错误:笼子是原始类型。泛型Cage的引用应参数化。我尝试了几个想法,但对这种棘手的语法感到困惑:o( 问题答案: 是通用类型,因此您需要指定一个类型参数,例如这样(假设有一个): 您可以使用任何扩展的类型(甚至是自身)。 如果省略type参数,那么在这种情况下最终得到的是。但是,即使这是您想要的,您仍应明确声明