Объявить массив ArrayLists определенного объекта - PullRequest
2 голосов
/ 11 февраля 2012

Мне нужно сделать массив массивов объекта.

Я пробовал два способа, но не могу получить доступ к свойствам объекта из элементов массива.

я пробовал:

     ArrayList<Word>[] SubList = (ArrayList<Word>[])new ArrayList(MainList.size()); 

И:

    ArrayList<Word>[] SubList= new ArrayList[MainList.size()];

И

           ArrayList<Word>[] SubList= (ArrayList<Word> [])new ArrayList[MainList.size()];

Что я хотел бы сделать, это вызвать метод из объекта внутри массива

как это:

    SubList[0].get(0).method();

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

Чтобы избежать работы с массивами низкого уровня и для обеспечения безопасности типов, вы можете составить список из списка

List<List<Word>> listOfList = 
         new ArrayList<List<Word>>(new ArrayList<List<Word>>());

, к которому вы затем сможете получить доступ, например,

Word word = listOfList.get(0).get(0);
1 голос
/ 11 февраля 2012

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

См. Часто задаваемые вопросы по Gererics Анжелики Лангер о проблеме (и некоторые дополнительные примечанияздесь ).

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

0 голосов
/ 11 февраля 2012

Java не очень хорошо поддерживает массивы обобщений. Однако, если вы настаиваете на том, чтобы структура верхнего уровня была объектом типа Array, вы могли бы обойти это ограничение, создав новый класс, расширяющий универсальный тип:

import java.util.ArrayList;

class Test {
    private static class StringArrayList extends ArrayList<String> {}

    public static void main(String[] args) {
        StringArrayList[] sublist = new StringArrayList[1];
        int stringLength;

        sublist[0] = new StringArrayList();
        sublist[0].add("Hello");

        stringLength = sublist[0].get(0).length();
        System.out.println(stringLength);
    }
}

Это не красиво, но работает. Это хорошо для персонального проекта, но может быть слишком загроможденным и C ++ - как для крупного Java-предприятия;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...