使用int值作为java.util.Dictionary中的一个类型参数
-
18-09-2019 - |
题
当我尝试声明一个词典这样:
private Dictionary<String, int> map;
编译器给我以下错误:
令牌“INT”语法错误,尺寸预期这个令牌之后
但它正常工作与Integer
。我隐约知道Java的治疗int
/ Integer
不同(我来自一个.NET背景),但我希望有人可以给我我为什么不能在一个字典<>
解决方案
在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);
但是,这其实只是自动转换类型,你的编译器。
其他提示
在净,“原始”类型由对象支持。在Java中,有原始类型和对象之间的硬之分。 Java 5引入自动装箱,它可以在某些情况下,两者之间的要挟。然而,因为Java泛型系统使用类型擦除,没有足够的信息来autobox在这种情况下。
Java集合只允许引用不是基本类型。您需要使用包装类(在这种情况下java.lang.Integer中)做你所追求的:
private Dictionary<String, Integer> map;
他们可以做这样的事情:
int foo = map.get("hello");
和
map.put("world", 42);
和Java使用自动装箱/拆箱处理转换的细节给你。
这里是有点描述就可以了。
要扩大TofuBeer的答案。
int是一个原始
整数是一个对象。
泛型不支持的原语。
@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)
那特技指定型,使其与基元的工作
在适配器
在包信息使用相同的将意味着你的那个包做全球
试验后发现这一点。
public class MyAdapter extends XmlAdapter<String, Integer> {
由于在Java中的原语是忠实地原语。在Java int
会按值传递,而Integer
将通过一个参考。在.NET int或的Int32等只是不同的名称。
不隶属于 StackOverflow