如何在Java中实例化Map.Entry <k,v =“”>数组?</k,>

时间:2011-12-14 11:55:29

标签: java generics casting subtype

  

可能重复:
  Java Generics: Array containing generics

我有一个Java类,它包含2个从数组中添加和删除元素的方法。为了使它通用,它需要一个子类型,因此它应该能够处理不同类型的对象。

问题是当我使用MapEntry(其中MapEntry是java.util.Map.Entry的实现)作为子类型实例化它时。这会导致在尝试将Object数组转换为MapEntry数组时抛出ClassCastException。我猜这是因为以下几行(其中T是子类型):

array = (T[])(new Object[array.length + 1]);
array = (T[])(new Object[array.length - 1]);

分别用于将数组大小增加/减少1。我也在整数,字符串和对象的数组上使用它,它适用于那些。

此外,它明确声明我需要使用数组,所以没有列表等。

有没有办法解决这个问题,同时仍然保持尽可能通用的类?

编辑:管理以解决问题。这是工作代码:

array = (T[])Array.newInstance(array.getClass().getComponentType(), array.length + 1);
array = (T[])Array.newInstance(array.getClass().getComponentType(), array.length - 1);

感谢所有帮助:D

2 个答案:

答案 0 :(得分:1)

A)不使用数组,它们很糟糕。改为使用集合。

B)如果不知道数组类型,则无法创建通用数组。如果你有类型(类),你可以这样做:

T[] array = Array.newInstance(type, length);

读:

答案 1 :(得分:0)

T[]数组是Object[]的子类,您可以将T[]投射到Object[]。但反之亦然:您无法将Object[]转换为T[],因为Object[]不是T[]的子类。

我认为您的问题归结为How to create an array of a generic type