Java 2D混合数组的枚举和字符串

时间:2016-09-25 14:16:04

标签: java arrays string enums

我有一个枚举类如下:

public enum ProductCategory {
    ELECTRONICS,
    ACCESSORIES,
    GROCERY,
    CLOTHING,
    HOMELIVING
}

我想实现一个2D混合数组,它同时存储混合数据类型Stringenum

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原样?谢谢!

1 个答案:

答案 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作为键类型,尝试存储具有已存在键的元素,则旧元素将被更新的元素替换。引入了更多功能。我建议你研究它并尝试使用这个系列来完成你的任务。