HashMap <string,object =“”>:如何将Object本身替换为String </string,>

时间:2012-09-30 18:36:11

标签: java hashmap

A a = new A();     //classA {   }

HashMap<String, Object> hm = new Hashmap<String,Object>();

hm.put("A", a);

我的问题是,我怎样才能将Object本身而不是“A”放在同一个声明中?

hm.put(`a??`, a);

5 个答案:

答案 0 :(得分:3)

你根本做不到,语言禁止它。只有当您的类AString的子类时才有可能这是不可能的,因为String在Java中被声明为final

关于你的面试问题:由于为声明选择的泛型类型参数,这是不可能的。您可以在Bounded Type Parameters中了解更多相关信息。

答案 1 :(得分:0)

如果该类持有一个不变的体面字符串字段,则可以使用它。

// the id property must be a String, immutable and unique for each instance!
myMap.put(a.getId(), a);

答案 2 :(得分:0)

如果您想将 object 作为 HashMap 中的关键字,那么该对象必须为 {{ 1}} ..因为,在您将密钥添加到immutable之后,您不希望任何人更改密钥

想象一下,如果您的密钥在插入后更改,您将无法找到插入的值..

但如果您的密钥是HashMap,那么如果有人试图更改您的密钥,他实际上会为自己创建一个新密钥,但您仍然会拥有自己的密钥......

如果您使用immutable作为String中的密钥(它们无法更改),就会发生这种情况。所以,如果您希望自己的对象成为密钥,则要么你的类是String的子类(你不能这样做),或者只是让你的类不可变..

答案 3 :(得分:0)

A a = new A();     //classA {   }

Map<A, A> hm = new Hashmap<A, A>();

hm.put(a, a);

但我认为放a->a

没有任何意义

答案 4 :(得分:0)

这实际上可以使用raw type,如下所示:

Object key = ...;
Object value = ...;
Map<String, Integer> map = new HashMap<>();//a normal map
Map rawMap = map; // here is the raw type
rawMap.put(key, value); // it works!

这样运行正常,但是当您稍后尝试使用通用映射时会出现问题:

Integer value = map.get(key);// ClassCastException (unless value actually is an Integer)

这就是为什么你被告知这是一个肮脏的伎俩&#34;。 You shouldn't use it.