为什么Java中的泛型可以处理类,而不能处理基元类型?
例如,这可以很好地工作:
List<Integer> foo = new ArrayList<Integer>();
但这是不允许的:
List<int> bar = new ArrayList<int>();
为什么Java中的泛型可以处理类,而不能处理基元类型?
例如,这可以很好地工作:
List<Integer> foo = new ArrayList<Integer>();
但这是不允许的:
List<int> bar = new ArrayList<int>();
Java中的泛型完全是编译时构造——编译器将所有泛型使用转换为正确类型的类型转换.这是为了与以前的JVM运行时保持向后兼容性.
这是:
List<ClassA> list = new ArrayList<ClassA>();
list.add(new ClassA());
ClassA a = list.get(0);
变成(大致):
List list = new ArrayList();
list.add(new ClassA());
ClassA a = (ClassA)list.get(0);
因此,任何用作泛型的东西都必须可以转换为Object(在本例中,get(0)
返回Object
),而基元类型不是,所以它们不能在泛型中使用.