Java 泛型类型 EMPTY 与 null

标签 java generics

我将数据存储在通用类型的数组 <E> 中并且需要将该数组中的某些单元格标记为空。我无法使用null因为 null 是一个有效条目,需要与空单元格区分开来。
做出这种区分的最佳方法是什么?我想避免使用其他数据结构,例如包含 "empty" 索引的列表细胞。

Object 为例array 我会简单地创建一个虚拟实例:

Object EMPTY = new Object();  

然后使用以下方法标记空单元格:

array[emptyIndex] = EMPTY;

据我所知,我无法创建通用类型 E 的实例来用作 "EMPTY"不过标记。是否有另一种方法来创建空标记或是否有其他解决方案?

最佳答案

As far as I know I cannot create an instance of generic type E to be used as an "EMPTY" marker though.

假设您没有关于 E 的信息,例如下限类型或其 Class对象,你是对的。您无法创建实例。您可以要求用户为此目的提供一个给您,但这似乎既不方便,又存在潜在危险。

Is there another way of creating an empty marker or are there any alternative solutions?

如果数组 List事实上必须一个n数组List ,并且它是否必须具有通用元素类型 E您对此没有具体知识,并且如果您无法使用 null值来代表空位置,那么你就将自己指定到了角落里。必须付出一些东西。

一些可能性包括

  • 使用MapInteger键而不是n 数组 List ,并将空元素建模为完全未映射。然后你就可以使用 Map.contains()确定给定索引是否对应于空元素。

  • 使用List其元素是某种包含 E 的包装类型和一个isEmpty标志或类似的。

  • 使用List没有标志的包装对象;将空元素表示为 null ,且非空 null作为包装器的元素包含 null .

  • 放弃类型安全,强行平原 Object进入数组 List作为你的“空”对象。只要 E 在运行时就应该没问题没有类型上限。

关于Java 泛型类型 EMPTY 与 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44704685/

相关文章:

java - Android viewBinder 在 simpleCursorAdapter 上显示图像

java - 分析两个字符串

java - 当您不知道实际权限时,如何解决关键资源的权限分配不正确的问题

具有泛型方法的 Swift 协议(protocol) : invalid redeclaration of implementation

c# - .OrderBy 函数的 System.Linq.Expressions.Expression

java - 按层次顺序获取类

java - 如何围绕面向对象设计进行思考

typescript - 通过泛型在 TypeScript 中将元组转换为对象

泛型和 Xstream

c# - 使用泛型类型的可空属性的泛型类