我有一个Hashtable
,其密钥为String
,值为String
,但我已达到项目中我需要能够存储多个的点不同的数据类型。例如,我需要将int
,String
,Date
等存储在一个Hashtable
中。
答案 0 :(得分:7)
HashTable
或任何集合Map
可以处理此问题,但int
和其他基本类型除外:您不能存储基本类型,只能存储Object
个引用。 int
需要包装为Integer
对象。
答案 1 :(得分:6)
Map<String, Object> map = new HashMap<String, Object>()
这为您提供了一个包含String类型键和Object类型值的映射,它基本上是指Object(Date,Integer,String等)类型的任何后代。其他答案正确地指出了这样一个事实,即不使用诸如int,boolean之类的原语,而是需要使用它们的对应物Integer,Boolean等。
此类地图上get
操作的返回类型为Object
。因此,开发人员有责任正确处理类型信息。
提供了关于Hashtable和HashMap之间区别的问题的一个很好的答案here。
答案 2 :(得分:4)
您可以让它存储常规数据类型Object
,但不允许使用原始数据类型。
答案 3 :(得分:4)
虽然这是可能的,但通常不是一个好主意。通常情况下,这会导致类型转换异常和问题。
HashTable可以设置为存储通用对象而不是特定类类型,但是检索它们时的类型转换不会自动发生。
为了将对象从集合中取出,必须开发某种形式的类型检查例程。
最好为要存储的每个类类型创建单独的集合。
PS:我还建议使用HashMap而不是HashTable。 HashTable已被弃用。
答案 4 :(得分:0)
将您的HashTable更改为Hashtable<String, Object>
,当您想要存储int
时,需要先将其(或使用自动广播)投射到Integer
。从表中获取值后,您可以按if(value instanceof String)
确定类型,依此类推。