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

2022-09-01 07:35:06

当我尝试将字典声明为这样时:

private Dictionary<String, int> map;

编译器给我以下错误:

令牌“int”上的语法错误,此令牌之后预期的维度

但它可以很好地与.我模糊地意识到Java对待/不同(我来自.NET背景),但我希望有人能给我一个完整的解释,为什么我不能在字典中使用基元<>IntegerintInteger


答案 1

在Java中,基元不是对象,因此您不能使用它们来代替对象。但是,Java会自动将原语(也称为自动装箱)框/取消装箱)放入对象中,以便您可以执行以下操作:

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

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