我将数据存储在通用类型的数组 <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
值来代表空位置,那么你就将自己指定到了角落里。必须付出一些东西。
一些可能性包括
使用
Map
与Integer
键而不是n 数组List
,并将空元素建模为完全未映射。然后你就可以使用Map.contains()
确定给定索引是否对应于空元素。使用
List
其元素是某种包含E
的包装类型和一个isEmpty
标志或类似的。使用
List
没有标志的包装对象;将空元素表示为null
,且非空null
作为包装器的元素包含null
.放弃类型安全,强行平原
Object
进入数组List
作为你的“空”对象。只要E
在运行时就应该没问题没有类型上限。
关于Java 泛型类型 EMPTY 与 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44704685/