我有一个枚举类如下:
public enum ProductCategory {
ELECTRONICS,
ACCESSORIES,
GROCERY,
CLOTHING,
HOMELIVING
}
我想实现一个2D混合数组,它同时存储混合数据类型String
和enum
:
Object[][] ProductList2 = {
{"Smartwatch", ProductCategory.ACCESSORIES},
{"Powerbank", ProductCategory.ELECTRONICS},
{"Vacuum cleaner", ProductCategory.HOMELIVING}
};
第一个column
将存储String
数据类型,而第二个column
存储enum
数据类型。但是,如果我运行以下代码:
ProductList[i][1].getClass();
代码返回存储值的数据类型为class java.lang.String
类型。如何存储enum
原样?谢谢!
答案 0 :(得分:0)
首先,您的代码按预期返回ProductCategory。写入ProductList2 [i] [0]而不是ProductList2 [i] [1]时将返回java.lang.String。
您希望包含String-ProductCategory对的集合在键的帮助下标识元素(在此示例中,key可以是String类型)。为此,不建议使用Object数组。原因是你可以在这个数组中存储任何类型的对象,无论是String,ProductCategory,任何数组,甚至是实例Object本身。
因此,您的任务的理想替代方案是java.util.Map接口。该接口具有以有效方式存储和检索键值对的功能。这是地图api,可以帮助您入门。 https://docs.oracle.com/javase/7/docs/api/java/util/Map.html为了与您类似的目的实现此接口的最常见类是java.util.HashMap。这个系列有很酷的功能。您无法存储重复的键值。如果您将String作为键类型,尝试存储具有已存在键的元素,则旧元素将被更新的元素替换。引入了更多功能。我建议你研究它并尝试使用这个系列来完成你的任务。