2016-03-29 3 views
0

Мне нужно создать несколько экземпляров класса и добавить их в массив (в настоящее время я использую ArrayList, но при необходимости я могу его изменить). Мне нужно сделать это примерно для 20 других классов, каждый из которых имеет различное количество экземпляров. Что было бы более эффективным способом сделать это, а не писать цикл for для каждого элемента?Эффективный способ создания неизвестного количества экземпляров объектов

например.

ArrayList<Tile> bag = new ArrayList<Tile>(); 
    num_tile_a = 10; 
    num_tile_b = 6; 
    num_tile_c = 4; 
    num_tile_d = 8; 

    for (int i = 0; i < num_foo; i++){ 
     bag.add(new Tile_a()); 
    .... 

EDIT: В этом примере, Tile_a, Tile_b, Tile_c и Tile_d все разные дочерние классы класса Tile.

+0

Вы хотите 10 экземпляров foo, 6 экземпляров бара и т. Д.? – Gendarme

+0

Это правильно. –

+0

Если вам нужны отдельные экземпляры, вы можете использовать только цикл (или цикл через потоки в Java 8), так как «Arrays.fill» создаст только один экземпляр. – Mena

ответ

3

Я не могу комментировать, поэтому я отправлю ответ ... путь против написания 24 разных циклов состоял бы в том, чтобы иметь карту с фабрики, которая может создать объект для количества объектов.

Что-то вроде

interface <T> IFactory { 
T create(); 
} 

А потом просто завод для каждого класса у вас есть.

Map<IFactory,Integer> factoryToNumOfInstances; 

Другим вариантом было бы, если каждый из этих классов имеет конструктор по умолчанию и не использовать какие-либо дженерики вы можете иметь карту

Map<Class,Integer> classToNumOfInstances; 

и просто вызвать метод newInstance();

clazz.newInstance(); 
+0

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

+0

Хмм, где вы избавитесь от петли? Вам все равно нужно называть 'factory.create()' или 'clazz.newinstance()' столько раз, сколько вам нужно иметь экземпляры. Использование обоих шаблонов облегчит расширение логики создания до новых (под) классов и не позволит развернуть создание для каждого потенциального (суб) класса.Вероятно, вы имели это в виду, но невинный читатель мог это упустить. – rpy

+0

@NickJarvis Карта должна была просто рассказать вам, сколько экземпляров вам нужно создать. Сколько раз вы вызываете заводской метод. – imps

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

  • Нет связанных вопросов^_^