代码之家  ›  专栏  ›  技术社区  ›  Richard Szalay

使用int作为java.util.Dictionary的类型参数

  •  34
  • Richard Szalay  · 技术社区  · 15 年前

    当我试图声明字典时:

    private Dictionary<String, int> map;
    

    编译器给了我以下错误:

    但它可以很好地与 Integer . 我模模糊糊地意识到Java int 整数 不同的是(我来自.NET背景),但我希望有人能给我一个完整的解释,为什么我不能在字典中使用原语<&燃气轮机;

    6 回复  |  直到 13 年前
        1
  •  40
  •   Jeremy Raymond    15 年前

    在Java中,原语不是对象,所以不能用它们代替对象。但是,Java将自动装箱/取消装箱原语(aka) autoboxing )转换为对象,以便执行以下操作:

    List<Integer> intList = new LinkedList<Integer>();
    intList.add(1);
    intList.add(new Integer(2));
    ...
    Integer first = intList.get(0);
    int second = intList.get(1);
    

        2
  •  9
  •   JohnE    15 年前

    在.Net中,“基元”类型由对象支持。在Java中,基本类型和对象之间存在着严格的区别。Java5引入了自动装箱,在某些情况下可以在两者之间进行强制。但是,由于Java泛型系统使用类型擦除,因此在这种情况下没有足够的信息来自动装箱。

        3
  •  5
  •   TofuBeer    15 年前

    private Dictionary<String, Integer> map;
    

    他们可以做一些事情,比如:

    int foo = map.get("hello");
    

    map.put("world", 42);
    

    Java使用自动装箱/取消装箱为您处理转换的细节。

    Here 这里有一些描述。

        4
  •  1
  •   Keibosh    15 年前

    来扩展TofuBeer的答案。

    int是一个原语

        5
  •  1
  •   Abs    14 年前
    @XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)
    

    这就是指定类型使其与原语一起工作的技巧

    public class MyAdapter extends XmlAdapter<String, Integer> {
    
        6
  •  0
  •   Yaakov Shoham    15 年前

    因为在Java中,原语是真正的原语。在爪哇 int Integer 将传递一个参考。在.NET中,int或Int32等只是不同的名称。

    推荐文章