Как установить значения для переменной массива класса? - PullRequest
0 голосов
/ 01 апреля 2019

Я устанавливаю значения для API, и мне нужно установить значения для переменной типа данных класса, которая является массивом, и мне нужно знать, как установить значение?

Я пробовал в Java, и я продолжаю получать ошибку времени компиляции

Items equipmenxxts = new Items ();

equipmenxxts.setDKU(savedRequest.DKUType());
equipmenxxts.setQuantity(savedRequest.getQuantity());

item.setEquipments(equipmenxxts);

**//error setEquipments(Items[]) in ItemOrder cannot be applied to (Items)**

API-класс для установки значений

public class ItemOrder implements java.io.Serializable {

    private java.lang.String company,
    private Items[] equipments; // class given below

    public ItemOrder() {
    }

    public ItemOrder(Items[] equipments) {
        this.equipments = equipments;
    }

    public java.lang.String getCompany() {
        return company;
    }


    public void setCompany(java.lang.String company) {
        this.company = company;
    }


    public Items[] getEquipments() {
        return equipments;
    }


    public void setEquipments(Items[] equipments) {
        this.equipments = equipments;
    }
}

тип данных этого класса, использованный выше

public class Items implements java.io.Serializable {

    private java.lang.String DKU;

    private int quantity;

    public Items() {
    }

    public Items(String DKU, int quantity) {
       this.DKU = DKU;
       this.quantity = quantity;
    }
}

API-класс для установки значения

@Service("clApiService")
public class NewApiImpl implements NewApiService {

    @Override
    public Request completeapiNewOrderRep(ServletWebRequest webRequest) {
        try {
            ItemOrder item = new ItemOrder();
            item.setCompany(req.getCompany());

            item.setEquipments(); //error setEquipments(Items[]) in ItemOrder cannot be applied to ()**
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

Я ожидаю просто установить значения (req.setDKU и Количество) для item.setEquipments ();

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

.setEquipments (Items []) требует массив элементов, но вы пропускаете только один элемент.

попробуйте сначала создать массив, содержащий ваш элемент:

item.setEquipments(new Items[] {equipmenxxts});

В качестве альтернативы вы можете создать equipmentxxts как массив:

final Items[] equipmenxxts = new Items[1];
equipmenxxts[0].setDKU(savedRequest.DKUType());
equipmenxxts[0].setQuantity(savedRequest.getQuantity());

item.setEquipments(equipmenxxts);

Кроме того, при настройке количества элементов таким образом, убедитесь, что вы не раскрываете внутреннее состояние вашего класса, если вы действительно не знаете, что делаете, и почему! Вы можете рассмотреть переменное количество аргументов для вашего метода:

public Items[] getEquipments() {
    return Arrays.copyOf(equipments, equipments.length);
}

public void setEquipments(Items... equipments) {
    this.equipments = Arrays.copyOf(equipments, equipments.length);
}

Теперь вы можете вызывать .setEquipments (...) с массивом в качестве параметра или с произвольным числом элементов:

item.setEquipments(e1, e2, e3);

Вы можете пересмотреть имена ваших переменных. Я не понимаю, почему объект ItemOrder называется "item" - и вы устанавливаете объекты "Items" через .setEquipments (...)

0 голосов
/ 01 апреля 2019

Для того, что я изучал, создание set для массива является ошибкой проектирования.Однако вы можете сделать void setItems(Items i), добавив к параметрам определенный индекс ItemOrder, или вы можете создать «суперсет», который не является реальным набором:

public void superSet(ItemOrder io){
   this.equipments=io.setEquipments(Items[] i);
}
...