如何实例化映射。条目<;K、 V>;Java中的数组?

如何实例化映射。条目<;K、 V>;Java中的数组?,java,generics,casting,subtype,Java,Generics,Casting,Subtype,可能重复: 我有一个Java类,它包含两个方法,可以在数组中添加和删除元素。要使其通用,它需要一个子类型,因此它应该能够处理不同类型的对象 问题是,当我使用MapEntry(其中MapEntry是java.util.Map.Entry的实现)作为子类型实例化它时。这导致在尝试将对象数组转换为MapEntry数组时引发ClassCastException。我猜这是因为以下几行(其中T是子类型): 用于将数组大小分别增加/减少1。我也在整数、字符串和对象的数组上使用它,它可以很好地处理这些数组 另

可能重复:

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

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

用于将数组大小分别增加/减少1。我也在整数、字符串和对象的数组上使用它,它可以很好地处理这些数组

另外,它明确指出我需要为此使用数组,所以没有列表,等等

有没有办法在尽可能保持类的泛型性的同时解决这个问题

编辑:设法解决问题。以下是工作代码:

array = (T[])Array.newInstance(array.getClass().getComponentType(), array.length + 1);
array = (T[])Array.newInstance(array.getClass().getComponentType(), array.length - 1);
谢谢你的帮助:不要使用数组,它们太糟糕了。改用集合

B) 如果不知道数组类型,则无法创建泛型数组。如果您确实具有类型(类),则可以执行以下操作:

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


  • A
    T[]
    数组是
    Object[]
    的子类,您可以将
    T[]
    强制转换为
    Object[]
    。但反过来是错误的:您不能将
    Object[]
    强制转换为
    t[]
    ,因为
    Object[]
    不是
    t[]
    的子类


    我认为您的问题归结为?

    强制转换到
    T
    实际上不应该做任何事情,至少在类型参数未绑定的情况下不应该这样做。你能提供多一点背景吗?类的类型签名以及如何实例化它?也就是说,不能有泛型数组,也不应该尝试这样做。我会在整个过程中使用
    对象[]
    ,并在方法中返回值时进行强制转换–这仍然是一种不安全的强制转换,但它更本地化一些。(或者看看
    ArrayList
    是如何实现的)A)如问题中所述,我这样做是为了分配任务,它明确指出我必须使用数组:(B)您能详细说明一下吗?如果您必须知道创建数组的数组类型,这难道不会消除泛型的全部意义吗?@user1097658是的,但不幸的是Java泛型就是这样工作的。这帮我解决了这个问题。请参见问题中的“我的编辑”。谢谢:P
    T[] array = Array.newInstance(type, length);