2014-09-01 3 views
-2

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

InvoiceItem[] invoiceItems; 
int test = 3; 
int i = 0; 

Это должно быть в массиве:

InvoiceItem invoiceItem = new InvoiceItem(); 
invoiceItem.setItemType("TestItem"); 
invoiceItem.setArticleNo("TestItemID"); 
invoiceItem.setDescription("TestDescription"); 
invoiceItem.setQty(1); 
invoiceItem.setPrice(new BigDecimal(20.00)); 
invoiceItem.setVat(new BigDecimal(5.0)); 

Существует вероятность того, что есть еще чем один InvoiceItem (test = 3), поэтому он должен находиться в цикле.

Это должен быть массив, мне нужно передать его другому классу, который принимает только массивы.

Как я могу это достичь?

Edit: Я попытаюсь сделать более ясным мой вопрос:

Мне нужно знать, как поставить эти

invoiceItem.setItemType("TestItem"); 
invoiceItem.setArticleNo("TestItemID"); 
invoiceItem.setDescription("TestDescription"); 
invoiceItem.setQty(1); 
invoiceItem.setPrice(new BigDecimal(20.00)); 
invoiceItem.setVat(new BigDecimal(5.0)); 

в массиве:

int countofInvoiceItem = 3; // there are 3 InvoiceItem 

InvoiceItem[] invoiceItems = new InvoiceItem[countofInvoiceItem]; 

Где может быть более одного InvoiceItem.

Метод выглядит следующим образом:

public final ResponseCreateInvoice CreateInvoice 
(Invoice Invoice, InvoiceItem[] InvoiceItems, Address DeliveryAddress, Address InvoiceAddress, String UserID, String Password) 

(Это дается и я не могу изменить)

и возвращает

ResponseCreateInvoice inv = wsClient.createInvoice(invoice, invoiceItems, deliveryAddress, invoiceAddress, userID, password); 

я вроде новичок в Java (или массивов) , так что это может быть простой вопрос, но я действительно не понимаю. Также имеет значение, что есть строки и Int, BigDecimal и т. Д., Смешанные вместе в массиве?

+0

Где находятся разные типы данных? существует только один тип 'InvoiceItem', не так ли? – Kent

+0

Я не понимаю ваш вопрос. Помимо объектов 'InvoiceItem', какой другой тип вы хотите хранить? –

+1

Мы все скажем вам: ** не делайте этого **, так как это плохая идея смешать типы в массиве по многим причинам. Тем не менее, вы никогда не узнаете, что такое каждый элемент. Всегда есть лучшее решение, но сначала вам нужно рассказать об общей проблеме. Обратите внимание, что это вопрос типа типа XY класса, в котором вопроситель лает неправильное дерево и концентрируется на своем неправильном решении, а не на самом вопросе. –

ответ

0

На основе вашего редактирования, ваш оригинальный вопрос не работает. Вы не хотите создавать массив разных типов, но вместо этого хотите создать массив из одного типа и только одного типа, являющегося массивом InvoiceItems. Вы смешиваете свойства объекта с элементами массива, и они не одно и то же. Этот код здесь:

invoiceItem.setItemType("TestItem"); 
invoiceItem.setArticleNo("TestItemID"); 
invoiceItem.setDescription("TestDescription"); 
invoiceItem.setQty(1); 
invoiceItem.setPrice(new BigDecimal(20.00)); 
invoiceItem.setVat(new BigDecimal(5.0)); 

где вы меняете свойства одного InvoiceItem.

Похоже, что ваш класс InvoiceItem имеет поля String для типа элемента, для номера статьи, для описания, поля int для количества, поля BigDecimal для цены и поля BigDecimal для VAT. И так ваш массив будет выглядеть просто нравится:

InvoiceItem[] invoiceItems = new InvoiceItem[ITEM_COUNT]; // where ITEM_COUNT is 3 

Вы можете использовать цикл для а затем создавать свои элементы:

for (int i = 0; i < invoiceItems.length; i++) { 
    invoiceItems[i] = new InvoiceItem(); 
} 

И вы могли бы, возможно, использовать тот же цикл для заполнения свойств каждый InvoiceItem в массиве:

for (int i = 0; i < invoiceItems.length; i++) { 
    invoiceItems[i] = new InvoiceItem(); 
    invoiceItems[i].setItemType(???); 
    invoiceItems[i].setArticleNo(???); 
    invoiceItems[i].setDescription(???); 
    invoiceItems[i].setQty(???); 
    invoiceItems[i].setPrice(???); 
    invoiceItems[i].setVat(???); 
} 

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

+0

Здравствуйте, спасибо за ваш ответ. Это то, что мне нужно, я думаю. И да, кажется, я путаю свойства и предметы. InvoiceItems - это элементы в существующей системе магазинов. Пользователь выберет их из магазина и установит количество. Каждый InvoiceItem равен статье в счете-фактуре. Статьи будут переданы из другого класса. Например: 'invoiceItems.setPrice (anotherclass.price);' я также получаю 'ITEM_COUNT' из этого класса. Надеюсь, это объясняет, что вы хотели знать? – KuRo88

0

С какими видами данных? В общем, вы можете использовать:

Object[] myArray; 

Все классы являются подклассами Object.

1

Вам просто нужно объявить массив как массив типа T, где T является суперклассом всех классов объектов, которые вы хотите заполнить. В худшем случае, это будет Object, но это плохой дизайн 9 раз из 10.

1

Я бы порекомендовал вам сделать класс, который содержит все, что нужно следующим образом:

public class YourClass{ 

int id; 
double value; 
String description; 
//and so on 

//create getters and setters 
} 

А ты может использовать этот класс для передачи массива объектов в другой класс.

Put your objects of the class in the Array 

Например

YourClass[] objects = new YourClass[SIZE];//define number of objects you need 

И вы можете передать каждый объекты по отдельности или в целом к ​​другому классу.

И в вашем приемном классе, вы можете иметь конструктор, как:

public YourRecievingClass(YourClass[] object){ 
//and recieve here as you need; ask further if you need help here too 
} 

Я думаю, что это лучший способ, чтобы принять хотя ваш вопрос не 100% ясно

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