2013-05-01 84 views
1

因此,大家可以看到是冠军我很困惑于:为什么地图<String, int> list = new HashMap <String, int>不允许?

Map<String, int> list = new HashMap<String, int> 

我在课堂上有点失去了对这个特定的主题,并希望如果有人能解释为什么,以及如何实际工作。

+0

什么是确切的编译器的信息? – 2013-05-01 16:20:52

+3

你为什么要调用地图'list'? :( – 2013-05-01 16:21:46

+3

@DaveNewton过早混淆?;) – 2013-05-01 16:22:28

回答

11

类型int不是一个类,它是一个原始类型。泛型类型参数必须分配类,而不是原始类型。您可以使用

Map<String, Integer> list = new HashMap<String, Integer>(); 

改为。所有的Java原始类型都有类包装,自Java 1.5起,自动装箱允许表达式如map.put("dummy", 1);,其中1被自动装箱为Integer

顺便提一下,拨打Maplist可能会引起混淆。你可以通过调用map来消除混淆。

+0

谢谢,我现在得到了我现在困惑的地方 – 2013-05-01 16:46:39

+0

+1随着挑剔:我会说“参考类型”来覆盖数组以及类。 – 2013-05-01 20:52:01

+0

它应该是“参考类型”。它不仅可以是数组或类或接口类型,它也可以是参数化类型或类型参数。 – newacct 2013-05-02 03:19:59

1

在Java中像下面一些事情发生

public interface Map<K, V> { 
    public K getKey();    
    public V getValue();   
} 

public class HashMap<K, V> implements Map<K, V> { 

    private K key;    //1 
    private V value;   //2 

    public K getKey() { return key; } 
    public V getValue() { return value; } 
//other getter setter methods 

} 

由于在 这里到位<的K,V>中

<字符串,int>的int是基本类型,我们can't make object of primitive type。 看到// 1和// 2以上代码

但是<字符串,整数>是可能的,因为它们是包装类型和对象可以使他们的

+0

嗯,有道理 – 2013-05-01 16:46:17

+0

如此满意回答:) – 2013-05-01 16:49:50

相关问题