2010-11-02 2 views
3

У меня возникли проблемы с литьем массива объектов в массив пар ключ-значение, с общими типами для объектов ключа и значения. Вот минимальный пример.Java Instantiate new Map.Entry-array

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 
+0

Почему вы думаете, что 'new Object [1]' тип совместим с 'Map.Entry []'? * Конечно * новый ванильный 'Object []' массив нельзя отнести к чему-то более конкретному. Точно так же, как это не является законным: '(String) new Object();'. –

ответ

2

Нужно ли иметь массив? Вы можете сделать следующее с 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; 

Однако, это даст вам предупреждение, и обычно не является предпочтительным.

+0

Спасибо! Последняя линия сделал произведение. :) – user494994

+0

@user, если мое решение решило вашу проблему, рассмотрите его как принятый ответ. – jjnguy

0

Вы не можете бросить Object к Map. Что ты пытаешься сделать?

+0

Это карта. Эндрю, я что-то пропускаю? – user494994

+0

array = new Map.Entry [1]; это то, что вы ищете. Кастинг для любого типа будет работать только в том случае, если этот объект действительно такого типа. В этом случае вы пытаетесь применить простой объект к объекту, который не является суперклассом. –

+0

Это приводит к ошибке: «Generic array creation» Я знаю, что тип cast не является безопасным. Но не могу ли я использовать его динамически? (Разве это не так?) – user494994

Смежные вопросы