【问题标题】:Java Instantiate new Map.Entry-arrayJava 实例化新的 Map.Entry-array
【发布时间】:2010-11-02 16:48:22
【问题描述】:

我在将对象数组转换为键值对数组时遇到问题, 具有键和值对象的通用类型。这是一个最小的例子。

public class Main {
    public static void main(String[] args) {
        array = (Map.Entry<Integer, Integer>[]) new Object[1];
    }

    private static Map.Entry<Integer, Integer>[] array;
}

将 Map.Entry 更改为类(而不是接口)也不起作用。

错误跟踪:

run:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.util.Map$Entry;
        at lab2.Main.main(Main.java:13)
Java Result: 1

【问题讨论】:

  • 为什么你会认为new Object[1] 是与Map.Entry&lt;Integer, Integer&gt;[] 兼容的类型?当然当然一个新的香草Object[] 数组不能转换为更具体的东西。同样,这也不合法:(String)new Object();.

标签: java arrays generics casting


【解决方案1】:

你需要一个数组吗?您可以使用List 执行以下操作:

public static void main(String[] args) {
    array = new ArrayList<Map.Entry<Integer, Integer>>();
}

private static List<Map.Entry<Integer, Integer>> array;

或者,您可以实例化非泛型类型,然后转换为泛型类型:

public static void main(String[] args) {
    array = (Map.Entry<Integer, Integer>[])new Map.Entry[1];
}

private static Map.Entry<Integer, Integer>[] array;

但是,这会给您警告,通常不是首选。

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 2012-12-08
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多