2016-09-25 139 views
0

的混合阵列I具有枚举类如下:爪哇2D枚举和字符串

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

+2

你不能使用'Map '吗? – Antoniossss

+0

您向我们展示了如何初始化'ProductList2'数组,但稍后使用'ProductList'(不带'2'后缀)。这是错误的问题,还是在你真实的代码? – Pshemo

+1

请勿使用此设置。这将是低效的,而不是安全的。取决于您以后如何使用这些地图,请使用Google地图或MultiMaps。 –

回答

0

首先,您的代码按预期返回ProductCategory。当写入ProductList2 [i] [0]而不是ProductList2 [i] [1]时,将返回java.lang.String。

您想要一个包含String-ProductCategory对的集合,以便借助键标识元素(在此示例中,键可以是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作为你的键类型,试图存储一个已经存在键的元素,旧元素将被新的元素替换。还引入了更多功能。我会建议你研究它,并尝试使用这个集合来完成你的任务。